Ubuntu 提升 JavaScript 运行速度
一 环境准备与运行时升级
二 Node.js 服务侧优化
- 充分利用多核:使用 cluster 模块或 PM2 集群模式,按 CPU 核心数 启动工作进程,提升并发吞吐。
- 示例(cluster 最小骨架):
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) cluster.fork();
cluster.on('exit', (w, code, sig) => console.log(`worker ${w.process.pid} died`));
} else {
http.createServer((_, res) => res.end('hello\n')).listen(8000);
}
- 避免阻塞事件循环:优先 异步 I/O,对 CPU 密集任务使用 Worker Threads/子进程 或将其拆分为小块配合 setImmediate/nextTick 让出主线程。
- 处理大文件与大数据流:使用 Streams 进行管道式处理,降低内存占用并提升吞吐。
- 缓存与连接池:对热点数据使用 Redis/Memcached;数据库启用 连接池、合理 索引 与 分页,减少慢查询。
- 反向代理与传输:使用 Nginx 作为反向代理与静态资源服务,启用 HTTP/2 与 TLS,必要时做 负载均衡。
- 内存与 GC 调优:通过 –max-old-space-size 设置堆上限,配合 node --inspect / --prof 与 clinic.js / PM2 定位瓶颈;避免频繁创建临时对象以减少 GC 压力。
三 前端浏览器侧优化
- 资源加载与网络:启用 压缩(gzip/brotli)、合理 缓存策略、使用 CDN;优先 HTTP/2 多路复用;按需 懒加载 图片与脚本。
- 脚本执行策略:将非关键脚本放到页面底部,或使用 async/defer;减少 DOM 操作与 强制同步布局,批量变更可用 DocumentFragment 或虚拟列表;长任务拆分为 requestIdleCallback 分片执行。
- 计算密集与复杂动画:将核心算法迁移到 WebAssembly,或放入 Web Workers,保持主线程流畅;对动画优先 CSS3 transform/opacity 与合成层优化。
四 监控与诊断
- 服务端:使用 PM2(如
pm2 monit、pm2 logs)进行进程与性能监控;结合 node --prof 生成 CPU 分析 报告,配合 Chrome DevTools 或 clinic.js 定位慢函数与调用栈;用 htop/glances 观察 CPU/内存/磁盘 资源。
- 浏览器端:使用 Chrome DevTools Performance 面板录制交互与渲染,识别 长任务、回流/重绘 与 GC 卡顿;必要时通过 WebAssembly 优化关键路径。
五 5 分钟快速检查清单
- 升级到 Node.js LTS 并使用 nvm 管理版本;依赖安装换用 国内镜像源。
- 服务端启用 cluster/PM2 多进程;为 CPU 密集任务使用 Worker Threads/子进程;对 I/O 使用 Streams;为热点数据加 Redis 缓存;数据库加 索引/连接池;前端用 async/defer 与 懒加载;启用 HTTP/2 与 CDN。