{"action":"created","issue":{"url":"https://api.github.com/repos/dart-lang/observe/issues/58","labels_url":"https://api.github.com/repos/dart-lang/observe/issues/58/labels{/name}","comments_url":"https://api.github.com/repos/dart-lang/observe/issues/58/comments","events_url":"https://api.github.com/repos/dart-lang/observe/issues/58/events","html_url":"https://github.com/dart-lang/observe/issues/58","id":85652385,"number":58,"title":"pkg:observe -- implement dirty-checking fallback for non-observable objects","user":{"login":"DartBot","id":8958862,"avatar_url":"https://avatars.githubusercontent.com/u/8958862?v=3","gravatar_id":"","url":"https://api.github.com/users/DartBot","html_url":"https://github.com/DartBot","followers_url":"https://api.github.com/users/DartBot/followers","following_url":"https://api.github.com/users/DartBot/following{/other_user}","gists_url":"https://api.github.com/users/DartBot/gists{/gist_id}","starred_url":"https://api.github.com/users/DartBot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DartBot/subscriptions","organizations_url":"https://api.github.com/users/DartBot/orgs","repos_url":"https://api.github.com/users/DartBot/repos","events_url":"https://api.github.com/users/DartBot/events{/privacy}","received_events_url":"https://api.github.com/users/DartBot/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dart-lang/observe/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/dart-lang/observe/labels/NotPlanned","name":"NotPlanned","color":"ededed"},{"url":"https://api.github.com/repos/dart-lang/observe/labels/PolymerMilestone-Later","name":"PolymerMilestone-Later","color":"ededed"},{"url":"https://api.github.com/repos/dart-lang/observe/labels/Priority-Medium","name":"Priority-Medium","color":"ededed"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":11,"created_at":"2015-06-05T23:01:24Z","updated_at":"2015-06-05T23:01:27Z","closed_at":null,"body":"<a href=\"https://github.com/jmesserly\"><img src=\"https://avatars.githubusercontent.com/u/1081711?v=3\" align=\"left\" width=\"96\" height=\"96\"hspace=\"10\"></img></a> **Issue by [jmesserly](https://github.com/jmesserly)**\n_Originally opened as dart-lang/sdk#16342_\n\n----\n\nAfter landing https://codereview.chromium.org/132403010/ we'll have most of the infrastructure to do this.\n\nIdeal: \n\\* Users can get dirty checking for all objects, and faster change notification if the object supports it.\n\n\\* Ideal: @­observable transform does not require ChangeNotifier base class.\n\n\\* Need a way of marking an object @­observable in another library.\n\n\\* Do we need an object to be a ChangeNotifier \\*and\\* have some properties dirty-checked? If so, we need a way of attempting to subscribe, and determining if such a property is not available for subscription. I think we need this to make computed properties really easy to use. Alternatively we can throw an error in this case so user at least knows that they forgot to make a property @­observable.\n\n\\* remove Observable base class -- objects can be observed via PathObserver/CompoundObserver. Add ObjectObserver from observe-js\n\n\\* ObservableList still provided as the &quot;fast version&quot;\n\n\\* Add logging/tracing diagnostics about dirty checking to provide developers a way to assess performance impact of dirty checking -- how many objects, which objects, how often was dirty checking run and how long did it take?\n\n\\* For best performance, this should be combined with an approach that generates fast-paths for expressions found in HTML\n\n\\* For now, the @­observable transform will not be run in dev mode, meaning those objects will be treated as dirty-checked. If using &quot;pub serve&quot; the transform will happen automatically.\n\nAny flaws in this plan? We've tried this before and not succeeded. I think the big changes since we last looked at this:\n\\* `pub build` is here and `pub serve` is coming\n\\* Zones have solved the issue of dirty-checking being triggered unreliably\n\\* we now understand 'pkg:observe' is a package and does not need to ever be 'dart:observe'\n\\* mirrors are now acceptable to use and we have other ways of mitigating their performance impact (generate fast-paths for html exprs)\n\\* this is one of the two reasons users are still stuck on polymer 0.4 (pkg:web_ui). many prefer pkg:web_ui as well as angular.dart for this very reason\n\n"},"comment":{"url":"https://api.github.com/repos/dart-lang/observe/issues/comments/109472815","html_url":"https://github.com/dart-lang/observe/issues/58#issuecomment-109472815","issue_url":"https://api.github.com/repos/dart-lang/observe/issues/58","id":109472815,"user":{"login":"DartBot","id":8958862,"avatar_url":"https://avatars.githubusercontent.com/u/8958862?v=3","gravatar_id":"","url":"https://api.github.com/users/DartBot","html_url":"https://github.com/DartBot","followers_url":"https://api.github.com/users/DartBot/followers","following_url":"https://api.github.com/users/DartBot/following{/other_user}","gists_url":"https://api.github.com/users/DartBot/gists{/gist_id}","starred_url":"https://api.github.com/users/DartBot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DartBot/subscriptions","organizations_url":"https://api.github.com/users/DartBot/orgs","repos_url":"https://api.github.com/users/DartBot/repos","events_url":"https://api.github.com/users/DartBot/events{/privacy}","received_events_url":"https://api.github.com/users/DartBot/received_events","type":"User","site_admin":false},"created_at":"2015-06-05T23:01:27Z","updated_at":"2015-06-05T23:01:27Z","body":"<a href=\"https://github.com/sethladd\"><img src=\"https://avatars.githubusercontent.com/u/5479?v=3\" align=\"left\" width=\"48\" height=\"48\"hspace=\"10\"></img></a> **Comment by [sethladd](https://github.com/sethladd)**\n\n----\n\nHigh Pri means we have a milestone assigned. Does this mean you're signing up to make it happen in 1.6? :)"}}