【阅读】《head first html5》第十章——《运用javascript》(实际上的javascript线程)
来源:互联网 发布:改变系统字体大小软件 编辑:程序博客网 时间:2024/05/17 17:54
- 如果没有web工作线程,javascript是单线程的,这说明它一次只能做一件事情
- 如果交给一个javascript程序太多的工作,可能收到一个脚本运行缓慢的对话框(这是应该要优化下你的代码了)
- web工作线程在一个单独的线程处理任务,所以主javascript代码可以继续运行,用户界面可以保持响应
- web工作线程的代码放在与页面代码不同的一个单独的文件中
- web工作线程不能访问也买你代码中的函数或DOM
- 页面中的代码与web工作线程通过消息通信(主要通过event.data来传递信息)
- 要想一个工作线程发送消息,可以使用postMessage
- 可以通过postMessage向工作线程发送字符串和对象,但不能像工作线程发送函数
- 可以将工作线程的onmessage属性设置为一个处理函数,来接受由工作线程返回的消息
- 工作线程将其onmessage属性设置为一个处理函数,来接收页面代码发送的消息
- 一个工作线程准备发回一个结果时,会调用postMessage,并传入结果作为参数
- 工作线程结果封装在一个事件对象中,并置于data属性中
- 可以使用event.target属性查找那个工作线程发出了消息
- 消息在主页面代码和工作线程之间会复制(类似java的传参,而不是像C++的指针,所有传入的参数都是副本),而非共享
- 可以使用多个工作线程完成能分解为多个任务的大规模计算,如计算一个分形可视化图像或对光线跟踪图像
- 每个工作线程在他自己的线程中运行,所以如果你的计算机有一个多核处理器,工作线程会并行运行,这回提高计算的速度
- 可以从页面代码调用的worker.terminate()来终止一个线程。这回终止工作线程脚本。工作线程还可以调用close()让自己停止工作
- 工作线程还有一个onerror属性。可以把这个属性设置为一个错误处理函数,如果你的工作线程存在一个脚本错误就会调用这个处理函数
- 要在工作线程文件中包含和使用javascript库,可以使用importScripts
- 还可以使用importScripts来利用JSONP。要在工作线程文件中实现传入URL查询的回调(这点没弄懂)
- 工作线程不能方位DOM或主代码中的函数,但是可以使用XMLHttpRequest和本地存储
小例子
在test.html文件中
<!doctype html><html><head><meta charset="utf-8"><title>工作线程Demo</title><script src="worker.js"></script></head><body><input type="text" placeholder="尝试对一个工作线程喊话" id="message"><input type="button" onClick="send()" value="发送"></body><script>var worker = new Worker("worker.js");function send() {var message = document.getElementById("message").value;worker.postMessage(message);worker.onmessage = function(event){//这里是线程回复我的信息alert(event.data);};}</script></html>
在worker.js文件中
// JavaScript Documentonmessage = function(event) {postMessage("你刚才说的是:"+event.data);};
0 0
- 【阅读】《head first html5》第十章——《运用javascript》(实际上的javascript线程)
- 【阅读】《head first html5》第八章——不再是父辈的老电视(实际上就是video标签啦)
- 【阅读】《Head First JavaScript》第十章——创建自定义对象
- 【阅读】《head first html5》第二章——javascript和DOM
- 【阅读】《head first html5》第四章——javascript函数和对象
- 【阅读】《head first javascript》第二章——存储数据
- 【阅读】《Head First javascript》第三章——探索客户端
- 【阅读】《head first javascript》第四章——决策
- 【阅读】《Head First Javascript》第五章——循环
- 【阅读】《Head First Javascript》第六章——函数
- 【阅读】《Head First JavaScript》第十一章——除错
- 【阅读】《Head First JavaScript》第八章——驾驭网页(利用DOM)分割HTML
- 【阅读】《Head First JavaScript》第九章——为数据带来生命(对象)
- 【阅读】《Head First javascript》第一章——交互式网络
- 【阅读】《Head First Javascript》第七章——表单与验证
- 【阅读】《head first jquery》第六章——jquery和javascript
- 【阅读】《head first jquery》(第十章)——jquery UI
- 【阅读】《head first html5》第一章——认识html5
- 黑马程序员——反射
- Windows 下安裝 OpenCC
- 南邮 OJ 1003 斐波那契数列
- eclipse(android)真机调试无法打印logcat解决方案
- 同一网站不同和二级域名和不同子目录的cookie
- 【阅读】《head first html5》第十章——《运用javascript》(实际上的javascript线程)
- 天声人語 20150803
- POJ3264 Balanced Lineup 线段树|ST表
- 日经春秋 20150803
- windows API获取物理内存大于4G的方法
- Genymotion+SDK+MyEclipse开发遇到adb问题解决方案
- 我的Android进阶之旅------>Android知识图谱
- 一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS
- 南邮 OJ 1004 线性表操作