小编典典

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

all

据我所知,网络工作者需要写在一个单独的 JavaScript 文件中,并像这样调用:

new Worker('longrunning.js')

我正在使用闭包编译器来组合和缩小我所有的 JavaScript 源代码,我宁愿不必将我的工作人员放在单独的文件中进行分发。有没有办法做到这一点?

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

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


阅读 80

收藏
2022-04-07

共1个答案

小编典典

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-
inlineworkers

如果您想即时创建工作脚本,或者创建一个独立的页面而不需要创建单独的工作文件,该怎么办?使用 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>
2022-04-07