HTML5之Worker Thread
传统网页中嵌入的JSP语言都是执行在UI的上下文中,一般来说这种JSP处理的都是简单逻辑,没啥问题,随着Web复杂度越来高,JSP能处理的事情也越来越复杂,如果JSP计算量比较大的话,这就会导致UI页面假死。HTML5中的WorkerThread可以缓解这个问题,Worker Thread通过UI thread创建一个新的线程来进行计算,消息和结果通过Web Message来进行通讯,由于这种异步性,UI便可以较为流畅地响应新到来的事件。
调用过程如下:
1.新的工作线程执行体放在一个单独的JS文件中,比如worker.js
01.self.onmessage = function(event){ 02. //do the real compute ---begin
03. // 04. //do the real compute ---end
05. //post message back to UI thread 06. self.postMessage(XXXX);
07.};
2.在UI的执行线程中生成一个worker对象,worker对象的构造函数参数就是worker.js
01.var worker = new Worker("worker.js");
3.下面就可以发送消息让worker干活了
01.worker.postMessage("perise");
4.活干完了给UI发送消息,也就是第一步中的
01.self.postMessage(XXXX);
5.UI进行响应
01.worker.onmessage = function(event){ 02. //update UI here
03. };
Notes:
*在Chrome中调试的时候会出现SECURITY_ERR: DOM Exception 18,传说是Webkit的bug,没有细究,可以通过搭建一个本地的HTTP服务器来解决,把HTML文件放到本地服务器上就可以绕开这个安全问题了,我使用的是WAMP。
*也许是为了控制Worker Thread的复杂度,Chrome的Worker Thread中不能再生成新的worker thread,其实这个很容易绕开,发送一个消息到UI中,让UI生成新的Worker Thread就好,Firefox可以支持subworker,但Chrome是可以支持sharework,这种shareworker可以共享JS文件里面的全局数据。
文章转自: http://software.intel.com/zh-cn/blogs/2011/11/22/html5worker-thread/
调用过程如下:
1.新的工作线程执行体放在一个单独的JS文件中,比如worker.js
01.self.onmessage = function(event){ 02. //do the real compute ---begin
03. // 04. //do the real compute ---end
05. //post message back to UI thread 06. self.postMessage(XXXX);
07.};
2.在UI的执行线程中生成一个worker对象,worker对象的构造函数参数就是worker.js
01.var worker = new Worker("worker.js");
3.下面就可以发送消息让worker干活了
01.worker.postMessage("perise");
4.活干完了给UI发送消息,也就是第一步中的
01.self.postMessage(XXXX);
5.UI进行响应
01.worker.onmessage = function(event){ 02. //update UI here
03. };
Notes:
*在Chrome中调试的时候会出现SECURITY_ERR: DOM Exception 18,传说是Webkit的bug,没有细究,可以通过搭建一个本地的HTTP服务器来解决,把HTML文件放到本地服务器上就可以绕开这个安全问题了,我使用的是WAMP。
*也许是为了控制Worker Thread的复杂度,Chrome的Worker Thread中不能再生成新的worker thread,其实这个很容易绕开,发送一个消息到UI中,让UI生成新的Worker Thread就好,Firefox可以支持subworker,但Chrome是可以支持sharework,这种shareworker可以共享JS文件里面的全局数据。
文章转自: http://software.intel.com/zh-cn/blogs/2011/11/22/html5worker-thread/
...全文
相关推荐
HTML5新特性 多线程(Worker SharedWorker)
HTML5的多线程特性是通过Worker API引入的,它允许JavaScript执行后台任务,从而避免阻塞用户界面。
Concurrent.Thread.js-demo:单线程的js模拟多线程的使用
这种模拟的多线程技术基于Web Workers,它是HTML5引入的一个特性,用于在后台线程中运行脚本,避免了长时间运行的脚本阻塞用户界面。
html5中Webworkers的工作原理课件
总的来说,HTML5的Web Workers提供了一种强大的工具,使Web应用能充分利用多核处理器的潜力,提升用户体验。
再谈JavaScript线程
总结一下,JavaScript线程模型虽然本质上是单线程的,但通过HTML5的Web Worker等技术,可以实现多线程的效果。
Concurrent.Thread.rar_JavaScript/JQuery_JavaScript_
不过,需要注意的是,"Concurrent.Thread"库的版本日期为2008年,那时Web Workers尚未被广泛采用(Web Workers是在2009年引入的HTML5规范)。


英特尔开源软件社区
