275 字
1 分钟
Node.js 事件循环避坑指南:千万别阻塞主线程!
你的 Node.js 为什么慢?
很多新手以为 Node.js 是单线程的,所以不能处理高并发。错! Node.js 慢通常只有一个原因:你在主线程里干了重活。
经典的死法
app.get('/compute', (req, res) => { // 这是一个同步死循环 const result = heavyComputation(); res.send(result);});当 heavyComputation() 执行时,Event Loop 被卡住了。
这时候,别的用户连个 Ping 都发不进来。整个服务器对外界是“未响应”状态。
哪些操作会阻塞?
- 大 JSON 解析:
JSON.parse(bigString)是同步的。如果字符串有 50MB,你的服务器就得卡几百毫秒。 - 正则回溯:写得烂的正则表达式在匹配长文本时,计算量是指数级的。
- 同步文件 IO:
fs.readFileSync。永远别在请求处理里用这个!
怎么救?
- Worker Threads:把计算任务扔给子线程。
- 流式处理 (Stream):别一次性读入大文件,用 Stream 一点点流过去。
- 别用 Node.js 做 CPU 密集型任务:让 Go 或 Rust 去做,Node.js 只负责粘合。
记住:Node.js 是个优秀的前台经理,但他不是搬运工。
Node.js 事件循环避坑指南:千万别阻塞主线程!
https://www.oferry.com/posts/a37/