前端知识HTML5前端都会去了解的

HTML5 之 Web Worker

2015-11-17  本文已影响772人  KeKeMars

HTML5 Web Worker

Web WorkersHTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。

WebWorker 可以做什么

局限性

WebWorker 使用

加载外部脚本

importScripts('script1.js');
importScripts('script2.js');
// 或
importScripts('script1.js', 'script2.js');

子Worker (参考链接)

内嵌Worker

即时创建 Worker 脚本,或者在不创建单独 Worker 文件的情况下创建独立网页

// Prefixed in Webkit, Chrome 12, and FF6: window.WebKitBlobBuilder, window.MozBlobBuilder
var bb = new BlobBuilder();
bb.append("onmessage = function(e) { postMessage('msg from worker'); }");

// Obtain a blob URL reference to our worker 'file'.
// Note: window.webkitURL.createObjectURL() in Chrome 10+.
var blobURL = window.URL.createObjectURL(bb.getBlob());

var worker = new Worker(blobURL);
worker.onmessage = function(e) {
  // e.data == 'msg from worker'
};
worker.postMessage(); // Start the worker.

Blob 网址

window.URL.createObjectURL() 的调用十分奇妙。此方法创建了一个简单的网址字符串,该字符串可用于 DOM FileBlob 对象中存储的参考数据。例如:blob:http://localhost/c745ef73-ece9-46da-8f66-ebes574789b1

Blob 网址是唯一的,且只要应用存在,该网址就会一直有效(例如直到卸载 document 为止)。如果您要创建很多 Blob 网址,最好发布不再需要的参考资料。您可以通过将 Blob 网址传递给 window.URL.revokeObjectURL() 来明确发布该网址:
window.URL.revokeObjectURL(blobURL); // window.webkitURL.createObjectURL() in Chrome 10+.

使用 WebWorker 技巧

示例只涉及 XMLHttpRequest 和计算;不是很大也不复杂。如果您让 worker 处理更复杂的任务,比如处理大量计算,它将会是一个功能强大的特性。在将这个很酷的技术运用到您的项目之前,了解一些使用技巧。

此外还有:

WebWorker 安全

postMessageHTML5中被引入,用来解决跨域或者跨线程数据交互的问题。但是如果messaging可以接收任何来源的信息,此页面有可能会被攻击;另外postMessage不通过服务器,如果不经过验证和过滤,可能成为XSS注入点。

参考

上一篇下一篇

猜你喜欢

热点阅读