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

防止长时间运行的JavaScript锁定浏览器

许天逸
2023-03-14
问题内容

我有JavaScript,它可以执行大量计算以及从DOM中读取/写入值。该页面很大,因此通常会阻塞浏览器长达一分钟的时间(有时使用IE会更长),并且CPU使用率达到100%。

是否有任何资源可以优化JavaScript以防止这种情况发生(我所能找到的就是如何关闭Firefox长期运行的脚本警告)?


问题答案:

如果您可以将计算算法转换为可迭代调用的内容,则可以使用具有短超时值的setTimeout来频繁地将控制权释放回浏览器。

例如,像这样的东西

function doCalculation()
{
   //do your thing for a short time

   //figure out how complete you are
   var percent_complete=....

   return percent_complete;
}

function pump()
{
   var percent_complete=doCalculation();

   //maybe update a progress meter here!

   //carry on pumping?
   if (percent_complete<100)
   {
      setTimeout(pump, 50);
   }
}

//start the calculation
pump();


 类似资料:
  • 问题内容: 我想做的是将加载图像添加到div(以便用户知道正在加载某些内容),然后调用jquery ajax函数,该函数设置为“ async:false”。这是我的代码: 问题在于,浏览器将锁定,并且在ajax调用完成后才追加加载图像,这当然是没有用的。Firefox是唯一实际附加加载图像的浏览器。IE,Chrome和Safari请勿附加正在加载的图片。 我知道浏览器锁定会发生,因为async设置

  • 问题内容: 如何防止使用JavaScript浏览网页? 问题答案: 使用可以显示消息,但不会中断导航(因为为时已晚)。但是,使用会中断导航: 注意:返回空字符串,因为较新的浏览器提供了诸如“任何未保存的更改将丢失的信息”之类的消息,这些消息不能被覆盖。 在较旧的浏览器中,您可以指定要在提示中显示的消息:

  • 当我在查询浏览器和我的应用程序中运行相同的查询时,我会得到很大的时间差。查询浏览器运行查询只花了2秒。但在我的应用程序中,它需要20秒。实际上,我正在处理12L的记录。我使用的是sql server数据库,在我的应用程序中使用了本机sql(JDBC)API。我指的是natve语句和resultSet API来获取记录。我在这里复制了我的代码片段。 另外,我使用了相同的查询条件与相同的用户。 我的代

  • 当用户试图关闭页面时(单击浏览器窗口上的X按钮或离开页面),我需要发送一条消息,如“确定吗?”并执行一些操作。 我正在使用离子3,这是我的配置 cli包:(/home/ubuntu/workspace/mHS/node_modules) 全球套餐: 本地套餐: 系统: 杂项: 我尝试了不同的方法,但没有成功: 1-离子生命周期钩 2-主机侦听器 } 3-超文本标记语言 我错过了什么?

  • 问题内容: 这就是我们防止浏览器缓存JS和CSS文件的方式。这似乎有点hacky ..有更好的方法吗? 更新:我们要防止缓存的原因是为了确保在执行新发行版时加载较新版本的文件。 问题答案: 您希望缓存CSS和JS。当它们回来时,它加快了网页的加载。添加时间戳后,您的用户将不得不一次又一次下载它。 如果要确保它们始终具有新版本,则要使构建系统在文件末尾添加一个构建号而不是时间戳。 如果您只是在开发中

  • 问题内容: 如果转到页面a并滚动浏览,则刷新页面将在您离开页面的位置刷新。这很好,但是在URL中存在锚点位置的页面上也会发生这种情况。例如,如果您单击一个链接并在环顾四周后刷新页面,您将不会处于锚点,而页面会跳来跳去。有什么办法可以防止使用javascript吗?因此,无论如何,您始终可以导航到锚点。 问题答案: 由于浏览器行为的更改,不再建议使用此解决方案。查看其他答案。 基本上,如果使用锚,则