【面向HTML5--WebWorker】
来源:互联网 发布:linux 重启后 svn失效 编辑:程序博客网 时间:2024/06/06 07:20
web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。你可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。
若Web页面中执行了很耗时的JS任务(如加解密、复杂路径计算、多参数计算等),由于所有的HTML/CSS/JS代码都在同一个UI主线程中执行,会导致页面“卡死”。
根本解决办法:创建一个新的并发线程,在新的线程中执行耗时JS任务,让UI主线程继续渲染页面/监听事件。
if(typeof(Worker)!=="undefined"){//检测浏览器是否支持 WebWorker var w = new Worker('x.js'); //H5中创建的新“线程”的语句}else{ // 不支持 WebWorker 的处理语句}
注意:Worker线程不同于普通线程的天然限制!!!
Worker线程不允许使用任何的BOM和DOM对象!——浏览器只允许UI主线程渲染页面,操作DOM元素!
Worker线程若想从DOM树上读取数据、或把处理结果显示在DOM树上,不能直接操作DOM元素;但可以给UI主线程发消息,让UI主线程来操作。
UI主线程给Worker线程发消息:
UI主线程: var w = new Worker('x.js'); w.postMessage('stringMsg');Worker线程: onmessage = function(e){ e.data }
Worker线程给UI主线程发消息:
UI主线程: var w = new Worker('x.js'); w.onmessage = function(e){ e.data }Worker线程: postMessage('stringMsg');
终止 Web Worker:
当我们创建 web worker 对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。
如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法:
w.terminate();
//实例//index.html<!DOCTYPE html><html><body> <p>Count numbers: <output id="result"></output></p> <button onclick="startWorker()">Start Worker</button> <button onclick="stopWorker()">Stop Worker</button><script>var w, result = document.getElementById("result");function startWorker(){ if(typeof(Worker)!=="undefined"){ if(typeof(w) == "undefined"){ w = new Worker("workers.js"); } w.onmessage = function (event) { result.innerHTML = event.data; }; }else{ result.innerHTML = "浏览器不支持WebWorker"; }}function stopWorker(){ w.terminate();}</script></body></html>//workers.jsvar i=0;function timedCount(){ i=i+1; postMessage(i); setTimeout("timedCount()",500);}timedCount();
阅读全文
0 0
- 【面向HTML5--WebWorker】
- html5 多线程处理webWorker
- html5 webworker的应用
- WebWorker
- webworker
- webWorker
- webWorker
- 关于html5的webworker的简单示例
- HTML5-桌面式web应用-地理定位, webworker, 会话历史
- WebSocket/WebWorker/WebStorage(HTML5的一些新特性)
- WebWorker和Server-Sent Events和HTML5 WebSocket
- webWorker操作
- webworker 探秘
- 浅谈webWorker
- 浅谈webWorker
- webWorker初识
- 【面向HTML5--表单2.0】
- 【面向HTML5--Canvas绘图】
- 第10章 android的消息机制
- sharding-jdbc使用限制
- RxSwift+Moya之项目实战
- [lcm] Qualcomm平台显示屏lcd添加I2C读取功能
- 接下来的安排
- 【面向HTML5--WebWorker】
- 2017 ACM/ICPC Asia Regional Qingdao Online
- Java Try...Catch...Finally在Java 6 与Java 7的变化
- POJ 2318 TOYS (叉积)
- 矩形覆盖求并 二维离散化 扫描线算法
- llinux C运算符表达式
- POJ 3061
- 结构体与类
- 订做开发各种自动化工具软件,数据库管理系统,信息发布采集软件