用于 DOM 相关处理的 JavaScript 并行线程

标签 javascript dom iframe

我有一个消耗资源的 DOM(浏览器)相关的 JavaScript 进程。启动时它会阻塞页面(其他 DOM 相关的处理)。是否可以异步并行运行此过程,并在完成后将结果传递到主页? Web Workers 则不然,因为流程使用 DOM。

这可以用 iframe 实现吗? JS 在 iframe 中启动也会阻止托管页面 DOM 吗?

最佳答案

实际上,这将是使用 WebWorkers 的一个主要示例,但正如您正确提到的那样,您不会在那里引用 DOM。您唯一的选择就是将该流程分解为更小的任务。如果你能做到这一点,你需要问自己两个问题

  • 较小的任务是否需要按顺序运行?
  • 这些任务可以异步运行吗?

如果您对这两个问题的回答都为,则可以设置失控脚本计时器并异步执行这些任务。示例:

var taskList = [
    function() {},
    function() {},
    function() {},
    function() {}
    // a whole lot more entrys
];  // in a real-world scenario you would `.push()` values or functions

(function _loop() {
    setTimeout(function() {
        var start = Date.now();
        do {
            taskList.shift()();
        } while( taskList.length && Date.now() - start < 100)

        if( taskList.length ) setTimeout( _loop, 100 );
    },100);
}());

上述算法将尽可能快地执行 taskList 包含的函数,但最多在 100ms 的时间范围内。这将确保浏览器和 UI 线程在处理过程中的阻塞时间不会超过 100 毫秒。因此,浏览器将保持响应

关于用于 DOM 相关处理的 JavaScript 并行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104381/

相关文章:

javascript - 通过单击按钮更改背景和文本颜色

javascript - 在不触发键盘或鼠标事件的情况下检测按下的修改键

javascript - 动态更改表单操作以生成 iframe

ajax - IE9 JSON 数据到 Iframe : "Do You Want To Open or Save This File?"

javascript - 设置 Google map 的一个区域来显示标记

javascript - jquery 不显眼的验证属性引用?

Javascript 告诉我一个节点有 23 个子节点,但它只有 11 个,firebug 同意我的观点

javascript - 如何将 Node js中的数据POST到codeigniter?

javascript - jQuery 自动完成问题 - Shift 键的行为与 Return 键相同

asp.net - 在div中加载aspx或调整iframe的大小