Слушатели событий Angular Elements / Zone.js замедляют домашнюю страницу - PullRequest
0 голосов
/ 03 апреля 2019

У нас есть проект Angular 7, который генерирует пользовательский элемент с угловыми элементами.Этот пользовательский элемент используется в проекте React и в проекте AngularJS.Когда код пользовательского элемента загружается в одном из этих проектов, сайт замедляется примерно на 30% - даже если пользовательский элемент не отображается в DOM!

Анализ производительности показывает, что методы invokeTask() и runTask () из zone.js вызываются очень часто.

Я пытался занести в черный список события, как описано в https://github.com/angular/zone.js/blob/master/STANDARD-APIS.md, но это не имело никакого эффекта.

Зависимости в package.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"
  },

Поэтому мой вопрос: почему zone.js прослушивает события, даже если пользовательский элемент не отображается в DOM?Как можно снова сделать сайт быстрее?

Обновление: Я также пытался установить ChangeDetection на onPush, но проблема остается.

1 Ответ

0 голосов
/ 03 апреля 2019

Я бы не стал трогать настройки ZoneJS, так как это сильно повлияло бы на сам Angular.

У меня был похожий опыт работы с компонентом, который каждый раз при создании замедлялся из-за круговой зависимости.Я предполагаю, что в вашем коде есть что-то, более вероятно, с зависимостями, которое приводит к нескольким сгенерированным событиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...