【问题标题】:Long-running loops in JavaScript and UI responsivenessJavaScript 和 UI 响应中的长时间运行循环
【发布时间】:2014-10-14 12:32:09
【问题描述】:

我有一段代码在“for”循环中处理一个巨大的 JSON 数组。

for(var i = 0; item = arr[i]; i++) {
   //PROCESS item
}

问题出在 Firefox 浏览器上。它显示一个警告对话框,指出脚本运行时间过长。以下代码是解决方案

//not precise code example, but it's kind of.
delay(arr, 0);

function delay(arr, num) {
   //process array by parts with 50 elements in each part
   for(var i = 1; i <= 50; i++) { 
      //PROCESS arr[num];
      num += i;
   }
   if(num < arr.length) {
      setTimeout(function() { delay(arr, num); }, 100);
   }
}

我想知道是否有更绝妙的方法来解决整个 UI 冻结并使 Firefox 不显示脚本调试对话框。请指教。谢谢

【问题讨论】:

    标签: javascript loops firefox recursion browser


    【解决方案1】:

    如果您使用的是 Firefox,您可能正在寻找 web workers,它允许您生成后台线程。

    【讨论】:

    • 我希望有一些跨浏览器的解决方案,因为其他浏览器也被冻结了,只是没有对话框。当然,用户 PC 上的 CPU 负载是 100%。
    • 据我所知,Chrome、IE10+、Safari 等都支持 Web Workers。请参见此处:caniuse.com/#feat=webworkers
    【解决方案2】:

    我认为你需要网络工作者。

    在这里你可以找到一个很好的网络工作者介绍:link

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 2020-01-31
      相关资源
      最近更新 更多