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捆绑在一个文件下,您总是可以只包含该文件,然后运行所需的任何操作。