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来优化长任务。
热门推荐
难熬!养猪和养鸡利润分化,养猪企业艰难度日
超32万人次!天水这一中国史前村落游客爆棚
IB三大核心课程详解!IB课程评分标准解读
2024年杭州公办学校国际部升学数据汇总
竹笋发霉了还能吃吗 六种人不宜多吃竹笋
新质生产力战略下的能源革命——直流微电网的崛起与应用
如何选择合适的租房区域?这种选择对生活质量有何影响?
黄金有多少K?这种规格在实际交易中有何重要性?
银川至四川交通路线详解:高速、铁路、航班全攻略
肚子不舒服应该吃哪些清淡食物
近期“热卖”,不可当宠物!它可能携带致命病菌……
怎么保鲜竹笋8个月不坏
血小板减少的 10 大原因,你知道几种?
山药和魔芋能一起吃吗?
电脑死机后只能进入BIOS?硬盘故障排查与解决方案
独立站和第三方平台该如何选择?新手小白必看!
亲属关系证明申请所需提供的材料清单是什么
魔兽世界地下堡藏宝图如何获取
医生解答:隔夜鱼能否食用?这份储存指南请收好
中枢神经系统感染:从病因到治疗的全面解析
如何在不同城市中寻找发展机会?这些机会如何影响我们的职业前景?
生酮减肥成功,到底是不吃主食的功劳?还是热量赤字?
坚持练五禽戏的好处 五禽戏的特点和锻炼价值
父子过户费的计算方法是什么?这种计算对购房者有何影响?
NLP:n-gram模型详解
中国人事考试网使用指南:从公告到证书领取全流程详解
要下雪了!2025年南方首轮大范围雨雪来了
购房必读:洋房为什么得房率高?得房率越高越好吗?
网络安全的相关比赛有哪些?需要掌握哪些必备技能?
厨房开窗面积规范详解:打造健康舒适的家居环境