网易首页 > 网易号 > 正文 申请入驻

前端以后也要多线程编程了么?

0
分享至

作者:卡颂来源:魔术师卡颂

前端工程师多年来习惯了在浏览器环境进行单线程开发。

随着浏览器对web worker的广泛支持、前端项目复杂度逐渐提高,「利用worker线程缓解主线程计算压力」逐渐成为一种可行方案。

比如,React就曾尝试将运行时的diff算法放在worker线程执行。

然而,社区众多的第三方库都或多或少操作DOM,worker线程无法操作DOM的限制(也可以说是特性)使得其应用领域被大大限制。

partytown是一个大小仅6kb的库,它的作用是让worker线程拥有包括「操作DOM」在内的多项能力。

一旦潘多拉的盒子被打开,这会成为前端多线程编程的起点么?

第三方库的坏处

我们经常在Github上搜索第三方库,这些开源库极大提高了我们的开发效率。然而第三方库有很多潜在隐患:

  • 第三方库可能执行不为人知的操作(比如向未知服务器发送请求)
  • 可能占用主线程过多算力
  • 可能使用一些有害的API(比如document.write)

究其原因,对于前端应用,不管是通过标签插入,还是通过打包工具打包,最终在宿主环境(比如浏览器),第三方库与你编写的代码都是以同样的地位运行在主线程中的。这就带来性能、安全方面的潜在风险。partytown的出现就是为了解决以上问题。

partytown的作用

当引入partytown后,书写在如下script内的脚步会在worker线程中执行:


对于主线程的API,例如:window、document、localStorage,partytown通过proxy劫持并转发对他们的调用。

比如,如下代码:

var w = document.body.clientWidth;

涉及到3个getter:

  1. get document
  2. get body
  3. get clientWidth

partytown会完成:

  1. 劫持getter,将它们转发到主线程
  2. 获取数据后返回
  3. 步骤1和2之间数据的序列化、反序列化

由于代理了主线程API,可以实现沙箱功能,比如:

  • 限制对document.cookie访问
  • 返回定制的navigator.userAgent
  • 禁止第三方库访问localStorage
  • 重置危险方法(如document.write)
  • 阻止脚步访问其他脚本

对于网络请求,web worker会发送同步的XHR请求,经由Service Worker拦截后与主线程异步通信。

数据返回后,Service Worker会响应web worker的请求。

所以,从worker线程角度看,一切调用都是同步的。这使得大部分原生API在worker线程与主线程中表现一致。

这意味着理论上任何第三方库都可以经由partytown迁移到worker线程执行。

总结

当然,凡事都有取舍,对于partytown来说:

  • worker线程的DOM操作都是阻塞的,不如主线程高效
  • 经由Service Worker拦截的请求在Network面板相比普通请求略有差异
  • 类似event.preventDefault()和passive event listeners在worker线程无效

但是,这终究是一次有意义的尝试。相信在不远的将来,会有越来越多前端应用从「多线程」中受益。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女子微信群辱骂他人后,在健身房遭多人殴打致脑震荡,两名涉事者被警方行拘

女子微信群辱骂他人后,在健身房遭多人殴打致脑震荡,两名涉事者被警方行拘

齐鲁壹点
2026-05-28 19:24:24
载16人黑车高速公路追尾半挂车致13死,河南车主在湖北上的牌照

载16人黑车高速公路追尾半挂车致13死,河南车主在湖北上的牌照

上游新闻
2026-05-28 15:50:25
埃布埃:阿森纳欧冠1-2巴萨,全队痛哭

埃布埃:阿森纳欧冠1-2巴萨,全队痛哭

懂球帝
2026-05-28 11:45:16
破防!亚历山大发律师函!怒告假摔!

破防!亚历山大发律师函!怒告假摔!

柚子说球
2026-05-28 20:41:49
戴尔股价盘后涨幅扩大至22%

戴尔股价盘后涨幅扩大至22%

每日经济新闻
2026-05-29 05:20:07
蔚来汽车李斌对整个行业悲观,称中国汽车很难回到过去的“黄金时代"

蔚来汽车李斌对整个行业悲观,称中国汽车很难回到过去的“黄金时代"

齐天候
2026-05-28 17:30:13
湖北大娘硬讹收割机后续!大批车主逃离,小麦烂地里,也没人敢去

湖北大娘硬讹收割机后续!大批车主逃离,小麦烂地里,也没人敢去

老猫观点
2026-05-28 07:26:11
巴西宣布内马尔腿伤缺阵2-3周 基本无缘世界杯首战 或被临阵替换

巴西宣布内马尔腿伤缺阵2-3周 基本无缘世界杯首战 或被临阵替换

我爱英超
2026-05-28 20:42:00
入侵前兆!荷兰战舰海空一体强闯中国领土,我军主动使用电磁压制

入侵前兆!荷兰战舰海空一体强闯中国领土,我军主动使用电磁压制

共工之锚
2026-05-28 12:30:57
难以置信!一家长带孩子参观华中科大后,吐槽缺少儿童游乐设施…

难以置信!一家长带孩子参观华中科大后,吐槽缺少儿童游乐设施…

火山詩话
2026-05-28 06:31:23
5月29日神舟二十二回家!“太空打水漂”如何练成“定点跳伞”?

5月29日神舟二十二回家!“太空打水漂”如何练成“定点跳伞”?

海右那人
2026-05-28 23:10:56
重大转折!乌克兰,迎来惊天噩耗!

重大转折!乌克兰,迎来惊天噩耗!

大嘴说天下
2026-05-28 23:05:03
德云社发布处罚决定:杨鹤通在直播中以个人名义发表不当言论对公司声誉造成损害

德云社发布处罚决定:杨鹤通在直播中以个人名义发表不当言论对公司声誉造成损害

新浪财经
2026-05-28 19:09:53
绝命抢断+读秒三分绝杀!古德温31+11又成上海之王 布朗空砍50分

绝命抢断+读秒三分绝杀!古德温31+11又成上海之王 布朗空砍50分

颜小白的篮球梦
2026-05-28 21:39:44
重磅!伊朗发射弹道导弹,美军:已拦截,伊方无端侵略!伊朗最高领袖发声:美以试图制造分裂、瓦解伊朗

重磅!伊朗发射弹道导弹,美军:已拦截,伊方无端侵略!伊朗最高领袖发声:美以试图制造分裂、瓦解伊朗

每日经济新闻
2026-05-28 21:33:14
比亚迪发布中国首款4nm智驾芯片,王传福:已开始规模化量产

比亚迪发布中国首款4nm智驾芯片,王传福:已开始规模化量产

新京报
2026-05-28 22:34:54
路撑不住,养护成本暴增40%!电车太重让全民买单,车企该改变了

路撑不住,养护成本暴增40%!电车太重让全民买单,车企该改变了

王新喜
2026-05-28 17:08:11
前调查记者揭矿难黑幕:逃生者被老板雇人砸回矿井里,因为死了比救治重伤赔得少

前调查记者揭矿难黑幕:逃生者被老板雇人砸回矿井里,因为死了比救治重伤赔得少

可达鸭面面观
2026-05-28 16:52:14
特朗普在白宫内阁会议给所有人发了一顶帽子,上面写着 250

特朗普在白宫内阁会议给所有人发了一顶帽子,上面写着 250

西游日记
2026-05-28 14:14:40
跌破4400,黄金风暴才刚开始!

跌破4400,黄金风暴才刚开始!

金投网
2026-05-28 17:28:06
2026-05-29 07:43:00
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 823关注度
往期回顾 全部

科技要闻

利润跌27%:快手只剩“可灵”这张牌?

头条要闻

17岁少年吸食笑气还帮KTV老板性侵未成年人 二人获刑

头条要闻

17岁少年吸食笑气还帮KTV老板性侵未成年人 二人获刑

体育要闻

唐斯经历的一切,此刻的他与尼克斯

娱乐要闻

林俊杰七七与大哥嫂子的瓜剪不断理还乱

财经要闻

小米仍需一次创业

汽车要闻

从智驾兜底到自研4nm芯片,再到迪迪虾,比亚迪智能化战略凭什么封神?

态度原创

艺术
时尚
游戏
亲子
军事航空

艺术要闻

吴湖帆小品册页

光脚、背“外卖盒”、羽毛头饰...早春秀谁赢了?

外媒评十大必玩肉鸽游戏 《小丑牌》《杀戮尖塔》等

亲子要闻

孩子没被幼儿园录取没学上!网友:晚生二十年怕是只有幼儿园文凭

军事要闻

美锁定伊朗打击新目标 考虑重启军事行动

无障碍浏览 进入关怀版