{"action":"closed","issue":{"url":"https://api.github.com/repos/Famous/famous/issues/339","labels_url":"https://api.github.com/repos/Famous/famous/issues/339/labels{/name}","comments_url":"https://api.github.com/repos/Famous/famous/issues/339/comments","events_url":"https://api.github.com/repos/Famous/famous/issues/339/events","html_url":"https://github.com/Famous/famous/issues/339","id":44626485,"number":339,"title":"Idea: dependency system for size/opacity/transform/etc providers.","user":{"login":"trusktr","id":297678,"avatar_url":"https://avatars.githubusercontent.com/u/297678?v=3","gravatar_id":"","url":"https://api.github.com/users/trusktr","html_url":"https://github.com/trusktr","followers_url":"https://api.github.com/users/trusktr/followers","following_url":"https://api.github.com/users/trusktr/following{/other_user}","gists_url":"https://api.github.com/users/trusktr/gists{/gist_id}","starred_url":"https://api.github.com/users/trusktr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trusktr/subscriptions","organizations_url":"https://api.github.com/users/trusktr/orgs","repos_url":"https://api.github.com/users/trusktr/repos","events_url":"https://api.github.com/users/trusktr/events{/privacy}","received_events_url":"https://api.github.com/users/trusktr/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/Famous/famous/labels/backlog","name":"backlog","color":"006b75"},{"url":"https://api.github.com/repos/Famous/famous/labels/question","name":"question","color":"cc317c"},{"url":"https://api.github.com/repos/Famous/famous/labels/wontfix","name":"wontfix","color":"ffffff"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2014-10-01T22:25:47Z","updated_at":"2015-05-22T08:41:01Z","closed_at":"2015-05-22T08:41:01Z","body":"Getters are currently called continuously on every render(), which means that lots of CPU is being wasted if the return value of the getter remains constant on each tick (e.g. something is done rotating or moving).\r\n\r\nFamo.us might benefit from a mechanism that lets you define a provider and define dependencies for the provider that will notify the provider on when to update, so that--for example--a transform getter is only called when dependencies have changed. Dependencies (or whatever they'll be called) can hook into, and hook out of, the Engine, so that providers depending on them update only as necessary. A rotation getter only needs to be called when there's actually rotation that needs to happen. A TransitionableTransform might be a dependency a provider would use, and would make a provider update only during a transition."}}