<HeadFirst_HTML5> O’REILLY_Chap.10(完)_Web工作线程
本博客的FollowMeReading系列初衷是在线的读书笔记. 为方便后期查阅, 故写成博客形式, 使用关键字查询便可以快读的找到相关的内容.
FollowMeReading系列所选的书籍一般选自O’REILLY或Apress出版社, 尽量保证笔记内容的权威性.
FollowMeReading系列的博客标题格式为: <书名> 出版社章节数章节名, 方便大家在纸质版书籍中查找.
FollowMeReading系列博文中的内容大部分是原文, 非原文部分前面将有’博主’字样提醒.
感谢<HeadFirst_HTML5>作者 Eric Freeman & Elisabeth Robson
感谢<HeadFirst_HTML5>翻译 林琪 张伶
正文
原文
BULLTE POINTS(要点):
如果没有Web工作线程, JavaScript是单线程的, 这说明它一次只能做一件事情.
如果交给一个JavaScript程序太多的工作, 你可能会收到一个”slow script”(脚本运行缓慢)对话框.
Web工作线程在一个单独的线程处理任务, 所以主JavaScript代码可以继续运行, 用户界面可以保持响应.
Web工作线程的代码放在与页面代码不同的一个单独的文件中.
Web工作线程不能访问页面代码中的函数或DOM.
页面中的代码与Web工作线程通过消息通信.
要向一个工作线程发送消息, 可以使用
postMessage
.可以通过
postMessage
向工作线程发送字符串和对象, 但不能向工作线程发送函数.可以将工作线程的
onmessage
属性设置为一个处理函数, 来接收由工作线程返回的消息.工作线程将其
onmessage
属性设置为一个处理函数, 来接收页面代码发送的消息.一个工作线程准备发回一个结果时, 会调用
postMessage
, 并传入结果作为参数.工作线程结果封装在一个事件对象中, 并置于
data
属性中.可以使用
event.target
属性查找哪个工作线程发出了消息.消息在主页面代码和工作线程之间会复制, 而非共享.
可以使用多个工作线程完成能分解为多个任务的大规模计算, 如计算一个分形可视化图像或对光线跟踪图像.
每个工作线程在它自己的线程中运行, 所以你的计算机有一个多核处理器, 工作线程会并行运行, 这会提高计算的速度.
可以从页面代码调用
worker.terminate()
来终止一个线程. 这会中止工作线程脚本. 工作线程还可以调动close()
让自己停止工作.工作线程还有一个
oneerror
属性. 可以把这个属性设置为一个错误处理函数, 如果你的工作线程存在一个脚本错误就会调用这个处理函数.要在工作线程文件中包含和使用JavaScript库, 可以使用
importScript
.还可以使用
importScript
来利用JSONP. 要在工作线程文件中实现传入URL查询的回调.工作线程不能访问DOM或主代码中的函数, 但是可以使用
XMLHttpRequest
和本地存储.