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

2024-03-03

据我所知,Web Worker 需要编写在单独的 JavaScript 文件中,并按如下方式调用:

new Worker('longrunning.js')

我正在使用闭包编译器来组合和缩小我的所有 JavaScript 源代码,并且我不想让我的工作人员在单独的文件中进行分发。有什么方法可以做到这一点吗?

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

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


http://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐