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来优化长任务。
热门推荐
窦性心律过缓是好是坏
针对特定求职意向,简历和求职信应该如何优化
9年前全球玩家就有7.5亿了,一文看懂飞盘运动全球发展史
提升短信送达率的3大实战技巧
彭州海窝子古镇:老街古建川西风,瞿上故都年味浓
外向型人格的好处
车辆掉头全攻略:这些路口允许掉头,这些路口不允许掉头
家庭教育的新挑战:如何应对孩子成长中的多重问题
泰迪犬的特点是什么
宠物狗狗可以吃蛋白吗(怎么喂)
小狗断奶后的饮食选择(为你的小狗提供均衡营养的食物)
地中海饮食预防失智症:从食材到生活方式的全面指南
急性酒精中毒急救指南:专家教你关键时刻科学应对
“紫苏”是个宝,常用它来泡水喝,或能帮助解决5个问题
项目经理升职后如何处理
寿命和刮胡子有关系?男人要不要天天刮胡子?医生给你答案
数学一最难,数学三次之,2025全国考研数学试题难度分析及对策
如何贴好地漏并确保防水效果?这种防水效果如何进行长期的维护和检查?
电视和功放连接指南:四种主流连接方式详解
水电公摊的计算标准是什么?这些标准如何影响居民费用?
多种方式查询养老保险个人账户余额
对联的种类:从正对到回文格的全面解析
互相关爱有哪些?互相关爱:点燃人际关系的温暖火花!
经典电影:为何历久弥新,依旧令人着迷?
布拉格交通指南:地铁、公交、机场往返攻略
每天涂防晒,你真的会变白吗?
儿童常见出疹性疾病知多少?
合同管理流程图优化策略
驾校选择指南:如何挑选合适的驾驶培训机构
深扒基普图姆和哈桑的训练计划,太过强悍,我们还发现.....