最近,我收到了这样的警告,这是我第一次收到:

[Violation] Long running JavaScript task took 234ms
[Violation] Forced reflow while executing JavaScript took 45ms

我正在做一个小组项目,我不知道这是从哪里来的.这以前从未发生过.突然,当其他人参与这个项目时,它出现了.如何找到导致此警告的文件/函数?我一直在寻找答案,但主要是关于如何解决它的解决方案.如果我连问题的根源都找不到,我就解决不了.

在这种情况下,警告仅出现在Chrome上.我try 使用Edge,但没有收到任何类似的警告,而且我还没有在Firefox上测试它.

我甚至从jquery.min.js得到了错误:

[Violation] Handler took 231ms of runtime (50ms allowed)            jquery.min.js:2

推荐答案

Update:Chrome 58+默认情况下隐藏了这些和其他调试消息.要显示它们,请单击"信息"旁边的箭头,然后 Select "详细".

Chrome 57默认启用"隐藏违规".要重新启用它们,您需要启用过滤器并取消选中"隐藏冲突"框.

当其他人参与到这个项目中时,它突然出现了

我认为你更有可能升级到Chrome 56.这个警告是一个很棒的新功能,在我看来,只有当你绝望的时候,请关闭它,你的判断员会从你身上拿走分数.潜在的问题存在于其他浏览器中,但浏览器只是不告诉你有问题.Chromium的门票是here英镑,但没有什么有趣的讨论.

这些消息是警告,而不是错误,因为它实际上不会导致重大问题.它可能会导致框架掉落,或者导致不太流畅的体验.

但是,它们值得研究和修复,以提高应用程序的质量.做到这一点的方法是关注消息出现的情况,并进行性能测试以缩小问题发生的范围.开始性能测试的最简单方法是插入以下代码:

function someMethodIThinkMightBeSlow() {
    const startTime = perf或mance.now();

    // Do the n或mal stuff f或 this function

    const duration = perf或mance.now() - startTime;
    console.log(`someMethodIThinkMightBeSlow took ${duration}ms`);
}

如果你想更高级,你也可以使用Chrome's profiler,或者使用像this one这样的基准库.

一旦你发现了一些需要很长时间的代码(Chrome的阈值是50ms),你有几个 Select :

  1. 删掉一些[全部]可能不必要任务
  2. 找出如何更快地完成同样的任务
  3. 将代码划分为多个异步步骤

(1) (2)可能很难或不可能,但有时确实很容易,应该是你的第一次try .如果需要,应该总是可以做到(3).要做到这一点,您将使用以下方法:

setTimeout(functionToRunVerySoonButNotNow);

// This one is not available natively in IE, but there are polyfills available.
Promise.resolve().then(functionToRunVerySoonButNotNow);

You can read m或e about the asynchronous nature of JavaScript here.

Javascript相关问答推荐

如何使用React渲染器放置根dis?

JS、C++和C#给出不同的Base 64 Guid编码结果

仅圆角的甜甜圈图表

如何在Connect 4游戏中 for each 玩家使用位板寻找7形状?

使用JavaScript重新排序行

如何修复(或忽略)HTML模板中的TypeScript错误?'

如何从html元素创建树 struct ?

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

使用GraphQL查询Uniswap的ETH价格

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

环境值在.js文件/Next.js中不起作用

在VS代码上一次设置多个变量格式

从逗号和破折号分隔的给定字符串中查找所有有效的星期几

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

postman 预请求中的hmac/sha256内标识-从js示例转换

使用API调用的VUE 3键盘输入同步问题

在HTML5画布上下文中使用putImageData时,重载解析失败

我在哪里添加过滤器值到这个函数?

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为

使用props 将VUE 3组件导入JS文件