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

JS单线程卡了10年,这个47行代码的库把Worker线程玩成了

0
分享至


2015年,一位前端工程师在GitHub issue里写下:「计算斐波那契数列时,页面冻结了3秒,用户以为浏览器崩溃了。」这条issue获得了1400多个,却等了9年才等到一个像样的答案。JavaScript的单线程模型像一条设计精良的单行道——异步I/O开得飞快,CPU密集型任务却堵成停车场。

Worker API(工作线程接口)理论上能解决问题,但用起来像在没有导航的陌生城市开车。你需要手动创建脚本文件、处理消息传递、管理线程生命周期,还要小心闭包陷阱。一个40行的计算任务,配套代码能写到200行。社区统计过,npm上带「worker」关键词的封装库超过800个,说明这不是某个人的痛点,是整个生态的集体妥协。

从「能跑就行」到「像写同步代码」

今年4月发布的puru库把这段代码:

const worker = new Worker('./fib.js');worker.postMessage(40);worker.onmessage = ({ data }) => console.log(data);

压缩成了一行:

const { result } = spawn(() => fibonacci(40));

表面看是语法糖,实际重构了心智模型。开发者不再需要把逻辑拆到另一个文件,不需要手写消息协议,甚至不需要理解Transferable Objects(可传输对象)的内存规则。puru在编译阶段把函数序列化,注入到Worker沙箱里执行,再把结果Promise化返回。

这个设计有个刻意为之的限制:函数不能捕获外部闭包。乍看是缺陷,实则是防呆机制——它强迫你意识到Worker运行在隔离上下文,共享状态会出bug。很多开发者第一次用Worker时,都踩过「闭包变量突然变成undefined」的坑。puru用编译时错误替代了运行时惊喜。

当Promise.all()不够用的时候

CPU密集型任务很少单打独斗。图像处理要流水线,科学计算要分片,数据分析要MapReduce。Promise.all()能并发,但管不了背压、超时、取消信号——这些在服务端是基本功,在浏览器里得自己造轮子。

puru从Go语言借了chan()和WaitGroup(等待组)两个原语。看这段生产者-消费者模型:

const input = chan(50);const output = chan(50);for (let i = 0; i < 4; i++) { spawn(async ({ input, output }) => { for await (const n of input) { await output.send(n * 2); } });}

通道在这里充当机械缓冲,解耦了生产速度和消费速度。50的缓冲区意味着生产者最多领先消费者50个任务,超出的部分会阻塞等待——这是显式的背压控制,raw Worker(原生工作线程)里完全没有。但缓冲区大小没有银弹:太小会频繁阻塞,太大可能内存溢出。puru把这个权衡留给开发者,文档里建议「根据任务粒度和可用内存测试调整」。

序列化的代价与边界

不是所有函数都能塞进spawn()。puru使用structured clone algorithm(结构化克隆算法)序列化参数和函数体,这意味着你不能传DOM节点、不能传函数引用、不能传循环引用的对象。一个试图在Worker里操作canvas的开发者会收到清晰的报错,而不是静默失败。

这个限制划清了适用边界:puru适合纯计算任务(加密、压缩、矩阵运算),不适合需要频繁与主线程交互的场景。游戏引擎的物理模拟、视频编辑器的实时预览,这些需要每帧同步的状态,Worker通信开销会吃掉所有收益。

库的维护者在README里写得很诚实:「这不是Worker的替代品,是80%场景的默认选择。」剩下的20%,你仍然需要掌握Transferable Objects和SharedArrayBuffer(共享内存缓冲区)。

为什么现在才出现

Worker API 2010年就进了草案,2014年全浏览器支持。14年里,社区不是没有尝试过封装——从早期的webworker-threads到近年的comlink,每个都解决了一部分问题。但comlink主打的是「让Worker像代理对象」,仍然要求你把逻辑拆到单独文件;puru第一次做到了「写在哪就在哪运行」。

这个突破依赖两个基础设施成熟:ES Module(ECMAScript模块)让动态加载不需要全局污染,Top-level await(顶层等待)让异步初始化不再丑陋。2020年前的JavaScript写不出puru这样的API。

npm周下载量从发布时的300涨到现在的4700,增速曲线像早期webpack。但更重要的信号是生态位——Vite团队正在评估内置集成,Deno(一个JavaScript运行时)的第三方注册表已经收录。一个库有没有未来,不看star数,看构建工具愿不愿意背书。

puru的GitHub仓库里有个被置顶的讨论串:「你们会支持WASM(WebAssembly)互操作吗?」维护者的回复是:「有计划,但想先观察社区怎么用通道模式。」这个回答本身说明了一件事——他们还没想清楚边界在哪里,但愿意跟着真实需求走,而不是画路线图。

下一个版本会砍掉什么功能,又会因为什么用户反馈加回来?

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

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.

相关推荐
热点推荐
“不显老”的男人,大多都有这3个好习惯,占一个就很了不起

“不显老”的男人,大多都有这3个好习惯,占一个就很了不起

三农老历
2026-04-06 05:19:12
美军战机20多年来首次被敌方击落,分析称伊朗大概率使用肩扛式导弹

美军战机20多年来首次被敌方击落,分析称伊朗大概率使用肩扛式导弹

澎湃新闻
2026-04-05 13:28:28
恭喜!天津队创造历史,男排再超女排战绩,李珊功不可没

恭喜!天津队创造历史,男排再超女排战绩,李珊功不可没

跑者排球视角
2026-04-05 23:54:40
世界小姐的“丰满身材”!

世界小姐的“丰满身材”!

文刀万
2026-04-04 17:49:19
又乱说话?张雪:花5亿设计logo太离谱 我2次一共花了600元

又乱说话?张雪:花5亿设计logo太离谱 我2次一共花了600元

念洲
2026-04-05 09:20:11
英雄出少年!拜仁上演让2追3好戏,18岁卡尔补时绝杀缔造神迹!

英雄出少年!拜仁上演让2追3好戏,18岁卡尔补时绝杀缔造神迹!

田先生篮球
2026-04-05 05:47:09
211大学副校长,涉嫌严重违纪违法,被查!

211大学副校长,涉嫌严重违纪违法,被查!

户外阿毽
2026-04-06 02:50:22
仅播6集就口碑大爆,评分高达9.0,终于又有好剧可以追了!

仅播6集就口碑大爆,评分高达9.0,终于又有好剧可以追了!

乡野小珥
2026-04-05 20:25:20
专家警告:每天吃一根香蕉,就等于给心脏“踩刹车”?真相来了

专家警告:每天吃一根香蕉,就等于给心脏“踩刹车”?真相来了

路医生健康科普
2026-04-05 11:20:07
鞠萍姐姐正式官宣退休,42年的央视生涯,退休金曝光却引发争吵

鞠萍姐姐正式官宣退休,42年的央视生涯,退休金曝光却引发争吵

错过美好
2026-03-02 10:12:05
中超综述:3强不败仅1队不胜 2豪门翻车 5队仍负分 下轮3场焦点战

中超综述:3强不败仅1队不胜 2豪门翻车 5队仍负分 下轮3场焦点战

我爱英超
2026-04-05 21:39:42
决赛100%胜率!赵心童10-3特鲁姆普 夺第6冠 创历史 超136万奖金

决赛100%胜率!赵心童10-3特鲁姆普 夺第6冠 创历史 超136万奖金

小徐讲八卦
2026-04-06 04:50:53
四位女星偷偷生娃,一个比一个能藏

四位女星偷偷生娃,一个比一个能藏

草莓解说体育
2026-04-06 00:34:27
西媒:亚马尔因生气而没庆祝莱万进球,巴萨门将教练更衣室安慰他

西媒:亚马尔因生气而没庆祝莱万进球,巴萨门将教练更衣室安慰他

星耀国际足坛
2026-04-05 19:40:15
2-2!波尔图主场爆冷,本菲卡差8分,穆帅计划有变:葡超要争冠

2-2!波尔图主场爆冷,本菲卡差8分,穆帅计划有变:葡超要争冠

体育知多少
2026-04-05 08:42:38
2026“草莓音乐节”燃爆武汉:首日3万观众涌入,马頔、陈粒、万青、二手玫瑰登台

2026“草莓音乐节”燃爆武汉:首日3万观众涌入,马頔、陈粒、万青、二手玫瑰登台

极目新闻
2026-04-05 18:40:57
被战争打醒了!外媒称阿联酋放弃投资阵风,退单狂潮即将上演?

被战争打醒了!外媒称阿联酋放弃投资阵风,退单狂潮即将上演?

肖兹探秘说
2026-04-05 19:24:03
不再隐瞒!畸形儿传闻后,阚清子哭得一塌糊涂,章小蕙的话暴隐情

不再隐瞒!畸形儿传闻后,阚清子哭得一塌糊涂,章小蕙的话暴隐情

一盅情怀
2026-04-05 16:29:22
破防了!35岁鹿晗《五哈 6》大变样,笑容消失,连被夸都小心翼翼

破防了!35岁鹿晗《五哈 6》大变样,笑容消失,连被夸都小心翼翼

橙星文娱
2026-04-05 17:30:02
真实的杜月笙有多狠?手段之毒辣,连上海滩巡捕房都要忌惮三分

真实的杜月笙有多狠?手段之毒辣,连上海滩巡捕房都要忌惮三分

千秋文化
2026-03-27 20:21:33
2026-04-06 06:35:00
摸鱼算法
摸鱼算法
致力于用最前沿的AI技术,换取更多发呆时间的三十岁青年。
797文章数 7关注度
往期回顾 全部

科技要闻

花200薅5千算力,Claude冷血断供“龙虾”

头条要闻

伊朗军方:过去两天击落美12架战机 含4架“黑鹰”

头条要闻

伊朗军方:过去两天击落美12架战机 含4架“黑鹰”

体育要闻

CBA最老球员,身价7500万美元

娱乐要闻

王灿兮否认婆媳不和 晒与杜淳妈合影

财经要闻

谁造出了优思益这头“怪物”?

汽车要闻

家用SUV没驾驶乐趣?极氪8X第一个不同意

态度原创

时尚
教育
游戏
艺术
手机

伊姐清明热推:电视剧《暴锋雨》;电影《我,许可》......

教育要闻

临时组队、跨国搭档!两个成都女孩拿下亚洲辩论冠军

三天鼠标干坏两个,你这还是自走棋嘛?

艺术要闻

绝了!东西方两幅神画,一眼就上瘾

手机要闻

OPPO Find X9s Pro银色哈苏专业增距镜亮相:观赛神器 颜值拉满

无障碍浏览 进入关怀版