Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[BUGFIX release] Avoid re-freezing already frozen objects.
When a helper is invoked we pass in the arguments, those arguments are frozen (via Object.freeze) so that helpers can't mutate them (and cause issues in the rendering engine itself). When a helper doesn't have hash arguments, we use a shared `EMPTY_HASH` empty object to avoid allocating a bunch of empty objects for no reason (we do roughly the same thing when no positional params are passed). Since these objects are shared they are being frozen over and over again (throughout the lifetime of the running application). Turns out that there is what we think is almost certainly a bug in Chrome, where re-freezing the same object many times starts taking significantly more time upon each freeze attempt. This change introduces a guard to ensure we do not re-freeze repeatedly. Thanks to @krisselden for identifying the root cause and reporting the upstream Chrome bug: https://bugs.chromium.org/p/v8/issues/detail?id=6450 (cherry picked from commit 567b1d7)
- Loading branch information