怎么进行Web Worker线程处理
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,本篇文章为大家展示了怎么进行Web Worker线程处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 浏览器把所有事件都通过操作系统安排到事件队列中(例如
千家信息网最后更新 2025年02月08日怎么进行Web Worker线程处理
本篇文章为大家展示了怎么进行Web Worker线程处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1 浏览器把所有事件都通过操作系统安排到事件队列中(例如:你去一个·窗口买菜,需要排队);浏览器使用单线程处理队列中的事件和执行用户代码(也就是单线程;web workers除外)。
因此,浏览器每次只能处理这些任务中的一个,并且任意一个任务都能阻止其他任务的执行。
2 怎样判断代码"足够快"?0.1秒的用户体验为:用户可以随意操作,无需等待;0.2~1.0秒的延迟会被用户注意到;如果超过1秒,那么用户会觉得不流畅;超过10秒,用户会非常沮丧。
手动代码检测:
... function jsTest(){ var start = new Date().getMilliseconds();//这里是一个开销很大的代码var time = stop - start;alert("jsTest() executes in " + time + " milliseconds"); }
fireBug的性能分析器
可以在测量的代码中加入特定代码来收集性能统计信息,或者在特定时间中实时检验具体执行的代码来监视运行时间。后者分析的代买性能失真少,但获取到的数据质量会第一点。你可以通过(点击"发送"按钮)
然后再星星firebug性能分析器查看耗时。
3 线程处理
使用多线程把开销大的代码从与用户交互的线程中剥离开来。多线程的基本问题是不同的线程可以访问并修改相同的地址。(我们需要的是一种像多线程那样能多任务执行却没有线程之间互相侵入危险的方法)
4 Web Workers
让我们来看一下如何利用Web Workers API 对值进行解封装。如下展示了如何创建并启动Worker:
//创建并开始执行workervar worker = new Worker("js/decrypt.js"); //注册事件处理程序,当worker给主线程发送信息时执行worker.onmessage = function(e){ alert("The decrypted value is" + e.data);} //发送信息给worker,这里指待解密的值worker.postMessage(getValueToDecrypt()); //下面为js/decrypt.js中的内容://注册用来接收来自主线程信息的处理程序onmessage = function(e){ //获取传过来的数据 var valueToDecrypt = e.data; //TODO:这里实现解密功能 //把值返回给主线程 this.postMessage(decryptedValue);}
在页面上任何开销很大的(例如,长时间运行)javascript操作都应委托给Worker;可以是运行速度更快。
5 如果你所使用的浏览器不支持Web Worker API ,那么可以用Gears Worker API ;代码如下:
//创建worker Pool,它会产生Workervar workerPool = google.gears.factory.create('beta.workpool'); //注册事件处理程序,他接收来自Worker的信息workerPool.onmessage = function(ignorel, ignorel2, e){ alert("The decrypted value is" + e.body);} //创建Workervar workerId = workerPool.createWorkerFromUrl("js/decrypt.js"); //发送信息到这个WorkerworkerPool.sendMessage(getValueToDecrpt(). workerId); //下面是js/decrypt.js的Gears版本: var workerPool = google.gears.workerPool;workerPool.onmessage = function(ignorel, ignorel2, e){ //获得传递过来的数据 var getValueToDecrpt = e.body; //TODO:这里实现封装功能 //把值返回给主线程 workerPool.sendMessage(decryptedValue, e.sender);}
6. 定时器
var funState = {};function expensiveOperation(){ var startTime = new Date().getMilliseconds(); while ((new Date().getMilliseconds() - startTime) < 80){ //TODO:它用如下方法执行开销很大的运算: //它在迭代的语块中执行80毫秒内完成的工作, //然后修改本函数外部"function"中的状态。 } if(!funState.isFinished){ //退出10秒后再执行expensiveOperation; //用较大的值进行试验,以在Ui响应和性能上取得合适的平衡 setTimeout(expensiveOperation(),10); }}
XHRHttpRequest: XHR 有同步与异步的执行模式。在异步模式中,XHR实质上就是一个拥有专用API的Web Worker。
XHR在在同步模式中,会导致用户界面的持续延迟时间与XHR发送他的请求并解析来自服务端响应的整体耗时一样。还会导致不可预知和用户不能容忍的界面延迟。
上述内容就是怎么进行Web Worker线程处理,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。
线程
代码
用户
处理
信息
事件
性能
任务
开销
浏览器
浏览
很大
内容
数据
时间
模式
程序
分析
延迟
运行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发行业竞争强度
web服务器管理与维护
地理空间数据库的分类
创科机器视觉软件开发平台
网络安全什么书比较好
移动网络技术德语课
软件开发工作培训贷款
怀化数据库恢复
北京交通大学网络安全学院
数据库模拟彩票系统
路由器 打印机服务器
sap数据库不建外键约束
软件开发资格考试
计算机网络安全 三次握手
云资源集群节点服务器价格
组态王软件开发版与运行版
创业时代服务器维修
个人网络安全总结
阿里云如何升级数据库
江苏书模翻书屏软件开发
数据库名字里有反斜杠
瓜苗网络技术
网络安全舆情管理办法
欧洲网络安全技术大学
2019网络安全支部活动
租服务器后会得到哪些信息
网络安全工程师证书官网
马斯克和中国科技互联网
群硕软件开发公司企业文化
网络安全演练流程