一尘不染

没有单独的Javascript文件的网络工作者?

javascript

据我所知,网络工作者需要用一个单独的JavaScript文件编写,并按如下方式调用:

new Worker('longrunning.js')

我正在使用闭包编译器来合并和最小化我的所有JavaScript源代码,而我不必将我的工作人员放在单独的文件中进行分发。有什么办法可以做到这一点?

new Worker(function() {
    //Long-running work here
});

鉴于一流的功能对JavaScript至关重要,为什么进行后台工作的标准方法必须从Web服务器加载整个其他JavaScript文件?


阅读 279

收藏
2020-05-01

共1个答案

一尘不染

如果您想即时创建工作脚本或创建独立页面而不需要创建单独的工作文件怎么办?使用Blob(),您可以通过将工作程序代码的URL句柄创建为字符串,将工作程序“内联”到与主逻辑相同的HTML文件中

BLOB内联工作程序的完整示例:

<!DOCTYPE html>

<script id="worker1" type="javascript/worker">

  // This script won't be parsed by JS engines because its type is javascript/worker.

  self.onmessage = function(e) {

    self.postMessage('msg from worker');

  };

  // Rest of your worker code goes here.

</script>

<script>

  var blob = new Blob([

    document.querySelector('#worker1').textContent

  ], { type: "text/javascript" })



  // Note: window.webkitURL.createObjectURL() in Chrome 10+.

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

  worker.onmessage = function(e) {

    console.log("Received: " + e.data);

  }

  worker.postMessage("hello"); // Start the worker.

</script>
2020-05-01