据我所知,网络工作者需要写在一个单独的 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
如果您想即时创建工作脚本,或者创建一个独立的页面而不需要创建单独的工作文件,该怎么办?使用 Blob(),您可以通过将工作程序代码的 URL 句柄创建为字符串来将工作程序“内联”到与主逻辑相同的 HTML 文件中
<!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>