仅在Chrome上的Angular项目中控制台上的zone.js违规警告

艾哈迈德·哈希姆(Ahmed Hashem):

我有一个使用创建的Angular 4项目@angular/cli,在开发模式下运行应用程序时,我在控制台收到这些警告:

zone.js:1489 [Violation] 'setTimeout' handler took 209ms
2[Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
2zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
2zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive.
zone.js:1157 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.

奇怪的是,警告Chrome上出现(我的Chrome浏览器版本的版本是:58.0.3029.110

  1. 这些(违反)警告是什么意思?
  2. 这对应用程序性能有害吗?
  3. 如何禁用/覆盖或配置zone.js删除这些警告?
Zze:

什么是被动事件?

被动事件侦听器是DOM规范中的一项新功能,使开发人员可以选择消除滚动而阻塞触摸和滚轮事件侦听器,从而选择更好的滚动性能。开发人员可以使用{passive:true}注释触摸和滚轮侦听器,以指示他们将永远不会调用preventDefault。该功能已在Chrome 51,Firefox 49和WebKit中提供。参考

Chrome发出警告...

[Violation] Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive.

...绑定到鼠标滚动事件时,本质上会警告您可能通过调用来抑制事件的滚动性能或禁用默认事件preventDefault()

当您尝试仍然调用preventDefault()被动事件时,Chrome也会引发错误

Unable to preventDefault inside passive event listener invocation.

Firefox对此有类似的错误,但是似乎不会像Chrome一样发出警告:

Ignoring ‘preventDefault()’ call on event of type ‘wheel’ from a listener registered as ‘passive’.

警告展示

运行以下代码段,并在详细模式下查看Chrome控制台。

// WILL throw violation
document.addEventListener("wheel", function(e) {
  e.preventDefault(); // prevents default browser functionality
});

// will NOT throw violation
document.addEventListener("wheel", function(e) {
  e.preventDefault(); // does nothing since the listener is passive
}, {
  passive: true
});


解决问题

在javascript中也有类似的文章

通过将触摸或滚轮侦听器标记为被动,开发人员保证处理程序不会调用preventDefault()以禁用滚动。这样可以释放浏览器,使其立即响应滚动,而无需等待JavaScript,从而确保为用户提供可靠的平滑滚动体验。

Angular尚未为此实现通用/易用的解决方案,可以在此处遵循

但是,由于将Typescript编译为javascript的事实,在typescript中实现上述代码段仍应消除违规行为


绩效影响

违规本身对应用程序性能完全没有危害,但是事件函数的内容可能会-因此这就是Chrome引发此警告的原因。请注意,此警告仅显示在Verbose console mode,普通用户不会看到。

据我所知,没有办法禁用此类警告,因为它们是由Chrome在运行时解释代码产生的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

react.js 项目中的警告

Webpack抑制浏览器控制台上的eslint警告

控制台上的Angular Js“未捕获错误:无模块:uiCropper”错误

Howler JS 和 React AudioContext 控制台警告

控制台中的 Angular 6 材质警告

客户端控制台上的Meteor.js错误

node.js在控制台上显示“未定义”

控制台上的简单node.js readline

如何正确安装ipfs js以在控制台上运行

Angular的$ log.debug()未在Chrome的控制台上显示

logging.info不会显示在控制台上,但会发出警告和错误提示

日志信息未显示在控制台上,但会发出警告和错误提示

Chrome控制台SameSite Cookie属性警告

Angular 7:ng服务有效,但控制台显示Zone.js错误,应用程序无法加载

angular-route.min.js问题| 错误的Chrome控制台[$ injector:modulerr]

gcc:避免显式memcpy的严格混叠违规警告

在Angular 6中从控制台隐藏IE警告

JS:为什么代码在控制台上的运行方式与.js文件中的运行方式不同?

在 Angular 项目中使用 lodash 时的优化救助警告

使用迷你图时的警告控制台-React.js

在node.js项目中运行节点控制台是否会加载package.json中的所有依赖项?

Angular 8 项目中的外部 .js 文件

控制台警告文件

Node.js child_process.exec:禁止在控制台上打印标准输出

如何在VScode的开发人员工具中的控制台上获取JS输出

合并函数以在浏览器控制台上运行多行 JS 代码

JS 代码运行不正确,但可以在控制台上运行

JS 函数在控制台上有效,但在代码中无效

JS 函数只在浏览器控制台上工作