Chapter 10 Web工作线程
0 Web工作线程原则
工作线程是重量级资源。
虽然从代码来看创建工作线程箱单简单,但这需要额外的内存和一个操作系统线程,在启动时间和资源方面开销可能很昂贵。
应创建有限的工作线程,并适当地设计计算来充分利用这些工作线程。
1 JavaScript单线程工作
JavaScript是单线程的,若任务时间太长,浏览器可能提示"Slow Script"
2 Web工作线程
-
Web工作线程是一个单独的线程处理任务,主JavaScript代码启动Web工作线程后,可以继续运行并对用户界面保持响应
-
Web工作线程由一单独的JavaScript文件定义
-
Web工作线程不能访问页面代码中的函数或DOM
-
检测浏览器对Web工作线程的支持性
if(window["Worker"]) { //浏览器支持Web工作线程 }
3 主页面与Web工作线程通信
- 主页面代码与Web工作线程通过message通信
- 主页面通过
worker.postMessage(message)
向工作线程发送消息;工作线程开始工作,完成后通过postMessage(message)
返回处理结果 - message可以是字符串、对象、数组等,但不能是函数,以保证工作线程不能修改DOM
- message为对象时,发送的是对象副本,而不是原对象的引用(与JavaScript函数调用传入对象不同)
- 主页面将工作线程的onmessage属性设置为处理函数,以接受工作线程返回的消息