Angular Elements / Zone.js 事件侦听器减慢主页速度

2024-04-15

我们有一个 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,但问题仍然存在。


我会避免接触 ZoneJS 设置,因为它会严重影响 Angular 本身。

我对一个组件有过类似的经历,每次创建的速度都会变慢,因为存在循环依赖。我的猜测是,您的代码中存在某些内容(更可能具有依赖关系),导致生成多个事件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular Elements / Zone.js 事件侦听器减慢主页速度 的相关文章

随机推荐

  • 如果我的应用程序处于活动状态,如何屏蔽主页键? (屏保、锁屏)

    如果我想写一个屏幕保护程序或锁屏 有没有办法防止home键返回到启动器 简单 当您进入活动时 调用 getWindow setType WindowManager LayoutParams TYPE KEYGUARD 当您退出活动时 请致电
  • 如果 2 个或更多人同时更新记录会发生什么?

    我使用 NHibernate 的版本属性 每次更新聚合根时该属性都会自动递增 如果 2 个或更多人同时更新同一条记录会发生什么 另外 我将如何测试这个 请注意 这不是我遇到过的情况 只是想知道 什么是原子的 什么不是 正如其他人所说 SQL
  • 为什么 :sprint 总是打印“_”?

    Prelude gt let a 3 Prelude gt sprint a a Prelude gt let c ab Prelude gt sprint c c 为什么总是打印一个 我不太明白的语义 sprint命令 Haskell 是
  • Gsub 获取 R 正则表达式中部分匹配的字符串?

    gsub a zA Z 0 9 5 1 htf84756 iuy 1 84756 iuy 我想获得84756 我该怎么办 Using gregexpr with regmatches 优点是只要求您的模式与您实际想要提取的位相匹配 stri
  • 原始类型的泛型(Int、Float、Double)会产生奇怪的错误消息

    这里有人可以看一下代码并告诉我它有什么问题吗 我本质上尝试构建几个对某些原始类型进行操作的通用函数 例如Int Float Double etc 不幸的是我无法让它正常工作 这是有效的代码 部分 http stackoverflow com
  • 以编程方式模拟平滑的拖动事件

    我用的是定制的拖动线性布局 https github com justasm DragLinearLayout 我添加的所有孩子都使用addDragView 可拖动 用户交互 我想模拟单击视图的拖动事件 平滑移动到布局底部 ACTION D
  • 有没有办法获取线程使用哪个核心?

    有没有办法获取线程使用哪个核心 例如 printf Core 2d n coreN 如果您使用的是基于 Linux 的系统 您可以使用 sched getcpu 打印线程正在运行的当前 CPU 核心数 cout lt lt Thread r
  • 是否可以在活动内启动活动?如何?

    活动A是主要的可见活动 我想开始活动B inside 活动A 并建立活动B in 框架布局 或类似的东西 的活动A 是否可以 如何 是的 您可以使用ActivityGroup并将其嵌入其中 http developer android co
  • Java 1.3 String.replaceAll() ,替换

    我正在和一些非常老的人一起工作Java 1 3准确地说 我正在尝试清理一些String通过删除非字母字符 标点符号和数字等 进行输入 通常我会做类似的事情 String replaceAll A Za z 然而 replaceAll 被介绍
  • c#:以 100% 质量保存 JPEG 时图像质量降低

    我只是加载 JPEG 图像并保存它 而不对其进行任何操作 但图像质量明显下降 这是代码 Bitmap imgOutput new Bitmap D image jpg Graphics outputGraphics Graphics Fro
  • SMS 是注册 Google App Engine 的唯一方式吗?

    我没有手机 但 Google App Engine 需要短信来验证帐户 还有其他方法可以完成注册吗 我很惊讶他们不使用 Gmail 帐户来执行此操作 编辑 谷歌为我创建了一个 问题解决了 否 如果您没有办法接收短信 您可以填写短信问题表格
  • 有没有办法在 Angular 2 中以可折叠格式显示有效的 json?

    有没有办法在 Angular 2 中以可折叠格式显示有效的 json pre data json pre 将很好地显示 json 但我需要能够折叠 展开其中的各个对象 尝试 ngx json viewer 它非常适合显示具有可展开 可折叠节
  • 向下滑动显示textview动画

    我有兴趣在我的 Android 应用程序中添加一个切换 TextView 可见性的动画 我希望它不只是将可见性设置为 Visibility GONE 和 Visibility VISIBLE 相反 我希望它具有类似 jquery 的幻灯片效
  • SessionId/身份验证令牌生成的最佳实践

    我见过有人使用 UUID 来生成身份验证令牌 然而 在RFC 4122 http www ietf org rfc rfc4122 txt据称 不要假设 UUID 很难猜测 不应该使用它们 作为安全功能 仅拥有即可授予的标识符 访问 例如
  • C - 我使用什么选项来生成列表文件?

    我是 C 编程语言和 gcc 的新手 我正在尝试破译一个相当复杂的 C 程序 我想阅读一个有用的列表文件而不是源文件 我正在寻找由 gcc 编译器创建的列表文件 其中包含 所有包含的源代码 xref 交叉引用列表 变量声明位置的引用 例如
  • Asp.Net Core API 禁用启动完成消息

    作为我的应用程序的一部分 我有一个 Net Core API 项目 与该项目作为自己的进程运行的大多数情况不同 我让 API 在线程等单个进程中运行 另外 对于我的项目 我实现了一个自定义日志系统来满足我的需求 但是 我遇到了一个小问题 每
  • 如何将accessibilityIdentifier设置为UIAlertController?

    这就是我简单创建的方式UIAlertController并将其呈现在屏幕上 private class func showAlertWithTitle title String message String let alert UIAler
  • 使用 gdb 在指定的可执行文件之外单步执行汇编代码会导致错误“无法找到当前函数的边界”

    我在 gdb 的目标可执行文件之外 甚至没有与该目标对应的堆栈 无论如何 我想单步执行 以便我可以验证汇编代码中发生了什么 因为我不是 x86 汇编方面的专家 不幸的是 gdb 拒绝进行这种简单的汇编级调试 它允许我设置并停止在适当的断点上
  • 如何以相反的顺序遍历 boost::dynamic_bitset ?

    有没有办法以相反的顺序遍历 boost dynamic bitset 我的意思是我们通常通过 find first 找到第一个设置位 然后使用 find next 继续 是否有任何相应的 find last 和 find prev 或任何其
  • Angular Elements / Zone.js 事件侦听器减慢主页速度

    我们有一个 Angular 7 项目 它使用 Angular 元素生成自定义元素 此自定义元素用于 React 项目和 AngularJS 项目 当自定义元素的代码加载到这些项目之一中时 即使自定义元素没有渲染到 DOM 中 网站速度也会减