我们有一个 Angular 7 项目,它使用 Angular 元素生成自定义元素。此自定义元素用于 React 项目和 AngularJS 项目。
当自定义元素的代码加载到这些项目之一中时,即使自定义元素没有渲染到 DOM 中,网站速度也会减慢 30% 左右!
性能分析表明,zone.js 中的 invokeTask() 和 runTask() 方法被频繁调用。
我尝试将事件列入黑名单,如下所述https://github.com/angular/zone.js/blob/master/STANDARD-APIS.md https://github.com/angular/zone.js/blob/master/STANDARD-APIS.md但这没有效果。
packages.json 中的依赖项是:
"dependencies": {
"@angular/animations": "^7.2.7",
"@angular/cdk": "^7.3.3",
"@angular/common": "^7.2.7",
"@angular/compiler": "^7.2.7",
"@angular/core": "^7.2.7",
"@angular/elements": "^7.2.7",
"@angular/forms": "^7.2.7",
"@angular/http": "^7.2.7",
"@angular/material": "^7.3.3",
"@angular/platform-browser": "^7.2.7",
"@angular/platform-browser-dynamic": "^7.2.7",
"@angular/router": "^7.2.7",
"@angular/upgrade": "^7.2.7",
"compass-mixins": "^0.12.10",
"core-js": "^2.5.4",
"dateformat": "^3.0.2",
"devextreme": "^18.2.6",
"devextreme-angular": "^18.2.6",
"devextreme-intl": "^18.2.6",
"in-view": "^0.6.1",
"jquery": "^3.0.0",
"keycode": "^2.1.9",
"lodash": "^4.17.5",
"material-design-icons": "^3.0.1",
"moment": "^2.22.2",
"muuri": "0.5.4",
"ng2-nouislider": "^1.7.13",
"nouislider": "^12.1.0",
"reflect-metadata": "^0.1.12",
"rxjs": "6.4.0",
"rxjs-compat": "^6.0.0-rc.0",
"zone.js": "^0.9.0"
},
所以我的问题是:即使自定义元素未在 DOM 中呈现,为什么 zone.js 仍在侦听事件?如何才能使网站再次变得更快?
Update:我也尝试将 ChangeDetection 设置为 onPush,但问题仍然存在。