Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS Web worker在多个worker中共享相同的脚本_Javascript_Web Worker - Fatal编程技术网

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

Javascript JS Web worker在多个worker中共享相同的脚本,javascript,web-worker,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]));

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

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包),或者b)通过AJAX下载脚本,假设CDN允许来自其他域的请求


这两种方法都不是我推荐用于生产代码的方法。

您是否研究过使用共享web worker?编译脚本不会改变这样一个事实,即每个worker仍会下载一次代码。@torazaburo浏览器在下载一次脚本后会缓存该脚本。所以,如果您将所有的lib捆绑在一个文件下,您总是可以只包含该文件,然后运行所需的任何操作。