angular-cn/packages/core/test/bundling
Kristiyan Kostadinov 18b33e79d3 perf(core): avoid storing LView in __ngContext__ (#41358)
Currently we save a reference to an `LView` on most DOM nodes created by Angular either by saving
the `LView` directly in the `__ngContext__` or by saving the `LContext` which has a reference to
the `LView`. This can be a problem if the DOM node is retained in memory, because the `LView` has
references to all of the child nodes of the view, as well as other internal data structures.

Previously we tried to resolve the issue by clearing the `__ngContext__` when a node is removed
(see https://github.com/angular/angular/pull/36011), but we decided not to proceeed, because it can
slow down destruction due to a megamorphic write.

These changes aim to address the issue while reducing the performance impact by assigning a unique
ID when an `LView` is created and adding it to `__ngContext__`. All active views are tracked in
a map where their unique ID is used as the key. We don't need to worry about leaks within that map,
because `LView`s are an internal data structure and we have complete control over when they are
created and destroyed.

Fixes #41047.

PR Close #41358
2021-04-26 09:31:41 -07:00
..
animation_world build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
core_all build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
cyclic_import perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
forms_reactive perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
forms_template_driven perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
hello_world perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
hello_world_i18n build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
hello_world_r2 build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
injection refactor(compiler): move factory out of injector definition (#41022) 2021-03-08 15:31:30 -08:00
router perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
todo perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
todo_i18n perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
todo_r2 perf(core): avoid storing LView in __ngContext__ (#41358) 2021-04-26 09:31:41 -07:00
util build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
README.md docs(core): Update instructions on updating symbol tests (#38707) 2020-09-28 16:15:59 -04:00

README.md

Bundle

js_expected_symbol_test

This folder contains tests which assert that most of the code is tree shaken away. This is asserted by keeping gold files of all symbols which are expected to be retained. When doing renaming it is often necessary to update the gold files, to do so use these commands:

yarn bazel run --config=ivy //packages/core/test/bundling/injection:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/cyclic_import:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/forms:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/hello_world:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/router:symbol_test.accept
yarn bazel run --config=ivy //packages/core/test/bundling/todo:symbol_test.accept

Running all symbol tests

To run all symbol tests with one command, you can use the following scripts:

yarn run symbol-extractor:check
yarn run symbol-extractor:update