当前位置: 首页 > 面试题库 >

违反长时间运行的JavaScript任务花费了xx毫秒

华安民
2023-03-14
问题内容

最近,我得到了这种警告,这是我第一次得到警告:

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

我正在做一个小组项目,我不知道这是从哪里来的。这从来没有发生过。突然,当其他人参与该项目时出现。我如何找到导致此警告的文件/功能?我一直在寻找答案,但主要是关于如何解决的解决方案。如果我什至找不到问题的根源,我将无法解决。

在这种情况下,警告仅在Chrome上显示。我尝试使用Edge,但没有收到任何类似的警告,并且尚未在Firefox上对其进行测试。

我什至从以下错误jquery.min.js

 [Violation] Handler took 231ms of runtime (50ms allowed)

jquery.min.js:2


问题答案:

更新 :默认情况下,Chrome 58+隐藏了这些和其他调试消息。要显示它们,请单击“信息”旁边的箭头,然后选择“详细”。

Chrome 57默认情况下启用“隐藏违规”功能。要重新启用它们,您需要启用过滤器,然后取消选中“隐藏违规”框。

当其他人参与该项目时,突然出现

我认为您更新到Chrome56的可能性更大。我认为,此警告是一个了不起的新功能,如果您不顾一切,请仅将其关闭,并且评估师会从您身上夺走分数。其他浏览器中存在潜在的问题,但是这些浏览器并没有告诉您有问题

这些消息是警告而不是错误,因为它实际上不会引起重大问题。否则可能会导致框架掉落或造成不流畅的体验。

但是,值得进行调查和修复以提高应用程序的质量。为此,请注意消息出现在什么情况下,并进行性能测试以缩小问题发生的范围。开始性能测试的最简单方法是插入如下代码:

function someMethodIThinkMightBeSlow() {
    const startTime = performance.now();

    // Do the normal stuff for this function

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

如果您想获得更高级的知识,还可以使用Chrome的分析器,或使用像这样的基准测试库。

找到花费很长时间的代码(Chrome的阈值为50ms)后,您可以选择以下两种方法:

  1. 删掉一些不必要的任务
  2. 弄清楚如何更快地完成相同的任务
  3. 将代码分为多个异步步骤

(1)和(2)可能很困难或不可能,但有时确实很容易,应该是您的第一次尝试。如果需要,应该总是可以这样做(3)。为此,您将使用类似:

setTimeout(functionToRunVerySoonButNotNow);

要么

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


 类似资料:
  • 问题内容: 我有一个python celery-redis队列处理一次上传和下载值得一次演出和大量演出的数据。 很少有上传内容需要花费几个小时的时间。但是,一旦完成了这样的任务,我就目睹了这种奇怪的芹菜行为:芹菜调度程序通过将其再次发送给工作人员来重新运行刚刚完成的任务(我正在运行一个工作人员),并且它在同一时间发生了2次任务! 有人可以帮助我知道为什么会发生这种情况以及如何预防吗? 这些任务肯定

  • 我在context.xml文件中定义了一个Spring调度任务,它每分钟运行一次。该任务调用postgres存储过程。存储过程运行时可以持续一分钟以上。如果当前运行没有完成,spring框架会调用相同的调度程序吗?谢谢,

  • 我正在尝试训练一个模型,在我看来,与其他数据集相比,该模型花费的时间太长,因为完成一个历元需要大约1小时和20分钟。我认为问题是因为数据集没有存储在ram上,但我不确定这一点。 代码如下: 型号: 顺序模型 2个卷积层,32个神经元,激活=relu 1个卷积层,64个神经元,激活=relu 平整和致密层,激活=relu 退出0.5 具有sigmoid激活的输出层(致密) Adam optimize

  • 我正在尝试将一个向服务器发送消息的异步任务迁移到RxJava。该任务大致执行以下操作: 1) 创建将要发送的消息(保存到数据库) 2)向用户显示消息(状态为“发送”) 3)将消息发送到服务器(下面的代码段) 4)将消息标记为已发送或失败(保存到数据库) 5)更新UI 我创建了所需的Rx链,部分如下所示: 当我订阅上述内容时,我会得到一个一次性的。通常,我会将其添加到CompositeDisposa

  • 问题内容: 我的应用程序运行一些数据库查询,这可能需要很长时间。 在执行这些查询时,我的应用程序似乎死机了,看起来该应用程序已停止工作。 我需要使用progressbar来避免此问题,但是我不确定如何预测查询执行所花费的时间。 运行查询的代码如下 如何显示进度条以显示查询的进度? 问题答案: 您可以用来解决这类问题。 首先定义一个类的全局变量, 例如 然后在执行查询(如事件或其他任何内容)的过程中

  • 我试着运行我的第一个颤振项目,但我不断地得到这个错误。 失败:构建失败,有一个异常。 > 哪里出错了:配置根项目'android'时出现问题。 无法解析配置“:classpath”的所有项目。无法下载gradle。jar(com.android.tools.build:gradle:3.5.0)无法获取资源的https://dl.google.com/dl/android/maven2/com/a