Web Worker优化长任务:避免页面卡顿的实用指南
创作时间:
2025-01-21 21:28:24
作者:
@小白创作中心
Web Worker优化长任务:避免页面卡顿的实用指南
由于浏览器GUI渲染线程与JavaScript引擎线程是互斥的关系,当页面中存在大量长任务时,会导致页面UI阻塞,出现界面卡顿、掉帧等情况。
查看页面的长任务
要查看页面中的长任务,可以使用浏览器的Performance工具:
- 打开浏览器的开发者工具
- 选择Performance标签
- 点击Start按钮开始录制
- 在录制结束后,展开Main选项
在Performance面板中,会看到一些红色的三角形标记,这些标记标识的就是长任务。长任务是指执行时间超过50ms的任务。
测试实验
下面通过一个实验来演示长任务对页面的影响:
let sum = 0;
for (let i = 0; i < 200000; i++) {
for (let i = 0; i < 10000; i++) {
sum += Math.random()
}
}
如果将上述代码直接在主线程中执行,计算过程中页面会持续卡死,无法进行任何操作。
使用Web Worker优化长任务
Web Worker可以在后台线程中运行脚本,从而避免阻塞主线程。下面是使用Web Worker执行上述计算任务的示例:
worker.js
onmessage = function (e) {
// onmessage获取传入的初始值
let sum = e.data;
for (let i = 0; i < 200000; i++) {
for (let i = 0; i < 10000; i++) {
sum += Math.random()
}
}
// 将计算的结果传递出去
postMessage(sum);
}
当使用Web Worker执行上述代码时,计算过程中页面仍然可以正常操作,不会出现卡顿现象。
考虑Web Worker的通信时长
使用Web Worker并不是没有代价的,还需要考虑通信时长的问题。例如,一个运算任务本身执行时间为100ms,但如果Web Worker的通信时长为300ms,那么使用Web Worker反而可能会使整体执行时间更长。
下图展示了创建和加载Web Worker脚本的通信时长:
因此,在决定是否使用Web Worker时,需要评估任务的运算时长减去通信时长是否大于50ms。如果满足这个条件,推荐使用Web Worker来优化长任务。
热门推荐
《创游世界》高效存档技巧揭秘
水体碳含量分析
三亚汽车年检攻略:避坑指南
冬至必备:砂锅炖羊杂汤的滋补秘籍
冬日暖心必备:砂锅炖羊汤
德阳至三亚自驾游,冬季避寒新宠儿
早起让你更高效,心理健康UP UP!
中医教你早起养生,开启健康生活
抑制铁死亡:益母草碱治疗糖尿病肾病效果显著
从杨绛、曾国藩到安南:早起如何改变人生
岳家从露教你养成早起好习惯
双色球开奖号码引发全民热议:一场关于希望与理性的探讨
“药食同源”理念助力慢性病防治,专家建议三餐食用中草药
炙甘草:补脾和胃、益气复脉的中药
蛋仔派对新赛季段位继承规则详解:从鹌鹑蛋到凤凰蛋,你的段位将如何变化?
蛋仔派对巅峰凤凰蛋段位继承攻略:积分规则与保星技巧详解
驾驶证副页记载档案编号等信息,丢失可一日补办
福州体育中考开考,80名志愿者助力全方位服务保障
武隆自驾游必打卡:仙女山、天生三桥、天坑地缝全攻略
武隆天坑地缝与天生三桥:探秘自然奇观
大局已定,退休人员坐不住了,如何规划财务才能退休生活无忧?
机构投资者如何左右A股市场?
项目经理的朋友圈:如何展现专业形象
石家庄双凤山景区:自然人文完美融合的4A级景区
双十一后理财指南:联名账户+三大预算法帮你管好钱袋子
2-3岁语言爆发期,家长这样做更利于孩子发展
科学补钙:不只是吃钙片这么简单
《蛊真人》动画化:从文字到画面的奇幻之旅
家庭漏电安全指南:预防、处理与注意事项详解
八市探秘:厦门美食的前世今生