JS Web worker在多个worker中共享相同的脚本

时间:2017-12-27 20:29:12

标签: javascript web-worker

我需要运行多个内联工作线程。我的问题是每个实例都需要共享导入的相同脚本。但是在我创建的每个实例上,它都会重新下载脚本。

function workerFn(){
  importScripts('https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js');
  // Each time this function will do something else
  postMessage(_.head([1,2,3]));
}

var code = workerFn.toString();
code = code.substring(code.indexOf("{") + 1, code.lastIndexOf("}"));

var blob = new Blob([code], {type: "application/javascript"});

var worker = new Worker(URL.createObjectURL(blob));
var worker2 = new Worker(URL.createObjectURL(blob));

worker.onmessage = function (m) {};
worker2.onmessage = function (m) {};

因此,在上面的示例中,lodash将下载两次。我怎么能阻止这个?

1 个答案:

答案 0 :(得分:1)

简答:

不幸的是,你做不到。是否下载脚本取决于浏览器。我认为这甚至不会发生在每个浏览器中。

另一个简短的回答:

避免浏览器重新下载脚本的唯一方法是:a)在代码中编译它(例如web包)或b)通过AJAX下载它,假设CDN允许来自其他域的请求。

这些都不是我推荐用于生产代码的东西。