我正在分析网页性能。网页包含一个“pointermove”事件的处理程序以更改“transform:translate(x,y)”(总共有大约10个DOM后代)。
在Chrome浏览器中,在特定条件下,“pointermove”并没有以非常高性能的方式处理-在“pointermove”期间,会发生延迟和变换属性的“不连续”更改。
相反,在Firefox中,一切都是高性能的(在这些特定条件下)。
在Chrome的性能分析中,我在“pointermove”期间检测到长“任务”。它说网页JS函数(和渲染)大约需要1毫秒,但“系统(自我)”需要128毫秒。
摘要页签:
任务
- 总时间:129.76 ms
- 自身时间:128.19 ms
自下而上标签页:
- 0.6 ms 37.5%更新层树
- 0.3 ms 19.9%复合层
- 0.2 ms 14.8%命中测试
- 0.2毫秒13.8%重新计算样式
没有解释任务是做什么的,它是什么?什么是“系统(自我)”,为什么花了这么多时间?如何化解这样的“波涛汹涌”行为?
我期望对“pointermove”事件的高性能处理,就像在Firefox中一样。
在Chrome中,“pointermove”是用一些长时间运行的“系统(自)任务”来处理的,这会导致糟糕的处理和不稳定的感觉(延迟)。
Snippet / JSFiddle
code is here ↘
1条答案
按热度按时间w7t8yxp51#
我也遇到过类似的问题,我的Notes AngularJS应用程序在textarea中有很大的文本。在性能选项卡中移动光标时,
System (self)
花费了约600 ms,其余时间为0或1 ms。我本打算创建一个问题,但发现了这个问题,然后想向Chromium报告一个bug。但后来我检查了Chrome使用了多少内存。我打开了很多标签,里面有很多沉重的应用程序。像多个YouTube链接,MS团队等。和隐藏在组中的页面。我已经打开了任务管理器,并杀死了一些进程/标签,有最多的内存。现在我的应用程序运行良好。
我可能会达到浏览器内存的限制。请注意,我有16 GB,在那个系统上运行Firefox(运行Chrome)不是问题。