-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix for tracked properties updating when using m3 native properties #1403
Conversation
Performance Report for b010003 Scenario - materializing-lots:
|
e9e39c0
to
2e40700
Compare
2e40700
to
c957d56
Compare
c957d56
to
71595f5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given the explanation in the comments, I think there is probably a more straight forward solution for us.
Do we think (with the new tests added) that all of the cases that we care about are handled?
Co-authored-by: Robert Jackson <rjackson@linkedin.com>
|
Co-authored-by: Robert Jackson <rjackson@linkedin.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Chatted a bit with @igorT about this (and my concerns in the prior comment). I think this is fine for now (with the tweak to use try
/finally
instead of relying on the nested access to reset), but we should work to refactor away from all of this.
The path forward is basically to migrate to using @glimmer/tracking/primitives/storage
(which allows us to remove the need for Ember.get
in the proxy handler's get
hook, by ensuring that our own tags are property consumed/entangled) via the https://github.com/ember-polyfills/ember-tracked-storage-polyfill. Once we do that then we can make our proxy return undefined
for both unknownProperty
and setUknownProperty
.
Those changes should likely be follow on work after this lands.
The fix in #1376 was not correct. In order to properly entangle we need to be doing
receiver.get
but to protect against re-entrance in production, we need to manually keep track of the key being accessed.