HTML5之Worker Thread

converf 2011-12-14 11:56:03
加精
2011-12-03 21:28 1463人阅读 评论(3) 收藏 举报
传统网页中嵌入的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进行响应

- collapse sourceview plaincopy to clipboardprint?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/

...全文
2266 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
wusky1987 2014-09-03
  • 打赏
  • 举报
回复
呃。。。 即使页面中嵌入JSP,在文档通过http(s)协议发送到浏览器端时,jsp已经生成了相应的文本(HTML代码),此时,何来页面卡死?浏览器收到html文件后,才进行解释,该请求img的请求img,该执行js的执行js
fanghui2268 2011-12-19
  • 打赏
  • 举报
回复
不错,值得试试
huaruhai0510 2011-12-18
  • 打赏
  • 举报
回复
啥意思?
cychao2010 2011-12-18
  • 打赏
  • 举报
回复
毛毛雨。。没有看见!
lmc158 2011-12-17
  • 打赏
  • 举报
回复
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发送消息,也就是第一步中的
lmc158 2011-12-17
  • 打赏
  • 举报
回复
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发送消息,也就是第一步中的
qweqe 2011-12-17
  • 打赏
  • 举报
回复
毛毛雨。。没有看见!!!
honghe521 2011-12-16
  • 打赏
  • 举报
回复
期待
hwindlan 2011-12-15
  • 打赏
  • 举报
回复
这个真的很不错啊!
suncft 2011-12-15
  • 打赏
  • 举报
回复
html5 ,牛B啊~
czcz1024 2011-12-15
  • 打赏
  • 举报
回复
js? jsp?
softgo336 2011-12-15
  • 打赏
  • 举报
回复
很是感谢您的帮助,很有用!!
cdcjk 2011-12-14
  • 打赏
  • 举报
回复
有点不明白
valid13 2011-12-14
  • 打赏
  • 举报
回复
页面上的多线程
书架上些许尘 2011-12-14
  • 打赏
  • 举报
回复
都很不错哦 顶
jamesDevelop 2011-12-14
  • 打赏
  • 举报
回复
恩,这个说的不错。
phoenixmancheng 2011-12-14
  • 打赏
  • 举报
回复
有点不明白
kobiko 2011-12-14
  • 打赏
  • 举报
回复
有点不明白
zhengyu123098 2011-12-14
  • 打赏
  • 举报
回复
捺捺 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 converf 的回复:]
传说是Webkit的bug
[/Quote]

本人深表怨念~~~~

1,552

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与英特尔开源软件相关的技术
社区管理员
  • 英特尔开源软件社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧