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来优化长任务。
热门推荐
肝脏健康从饮食开始:7种食物少吃,医生教你如何预防肝病
生源较差班级,教师如何抓教学成绩?
荒野大镖客2连发步枪排行 《荒野大镖客OL》最佳枪械选择攻略
科研常用的数据库是什么
父亲的陪伴:孩子成长中的不可或缺
风寒感冒饮食吃什么东西好
调控愤怒情绪的方法有什么
电车崛起,油液行业面临新挑战
《地下城与勇士起源》角色打造教学
五台山殊像寺:文殊菩萨的圣地与禅意空间
佛教寺庙古建筑:设计背后的文化与哲学
探寻千年古县的魅力之旅——龙川(中):佗城的历史与文化
怎么提升体能 应该如何进行锻炼
老年人常用代步工具是否属于机动车?上路需要考驾照吗?
恶魔之魂与黑暗之魂关系,恶魔之魂与黑暗之魂:魂系列传承揭秘
西兰花可以和胡萝卜一起吃吗
最小的Win7精简版32位系统详解:特点、安装方法及配置要求
如何优化游戏设置以实现60帧流畅体验?
如何撰写一份打动合伙人的商业计划书?
快速夹钳连杆的材料选择?
鲜花小镇、渔人码头、咖啡街……汉口北“小镇经济”火了
自卫行为认定标准有哪些
国民党五虎上将刘峙,从北伐的福将到解放时的猪将,他经历了什么
穿衣不够暖,难怪感冒频频找上门!你穿得对吗?
攻防对抗视角下的网络安全主动防御体系研究
在所有老虎当中,爪哇虎有哪些特征与生活习性?
秋季如何护理皮肤
如何校准称重传感器以确保准确性?
耗资20亿,评分2.1,这部片是史上最烂?
催吐法减肥的危害:不只是体重下降那么简单