据我所知,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(使用前将#替换为@)