JS 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将下载两次。我该如何防止这种情况?

简短答案:

不幸的是,您不能。无论是否下载脚本,都取决于浏览器。我认为这甚至不是在每个浏览器中都会发生。

另一个简短答案:

避免浏览器重新下载脚本的唯一方法是a)将其编译在您的代码(例如Web Pack)中或b)通过Ajax下载,假设CDN允许从其他域中进行请求。p>这些东西都不是我推荐的生产代码。

最新更新