Linux服务器上 JavaScript 性能优化实战
一 前端资源与传输优化
- 启用压缩与传输协议:在 Nginx/Apache 开启 Gzip/Brotli;优先启用 HTTP/2(多路复用)以显著减少阻塞与握手开销。
- 强缓存与协商缓存:为静态资源设置长期 Cache-Control/Expires,配合 ETag/Last-Modified 做协商缓存,减少重复下载。
- 使用 CDN 分发静态资源(JS/CSS/图片/字体),降低源站带宽与延迟。
- 减少阻塞渲染:将 CSS 放在 ,将 JS 放在 前 或使用 async/defer;避免同步脚本与阻塞式渲染。
- 资源组织:进行代码分割与按需加载(如按路由/组件),减少首屏体积与解析时间。
- 渲染与动画:优先 CSS3 动画 与 GPU 加速,使用 requestAnimationFrame;减少强制同步布局,合并多次 DOM 操作为批量更新(如 DocumentFragment)。
二 Node.js 运行时与代码层面优化
- 异步与事件循环:坚持 Promise/async-await,避免同步 I/O 与长任务阻塞事件循环;将大任务拆分为小块,必要时用 setImmediate/process.nextTick 让出控制权。
- 计算密集任务:将耗时计算放入 Worker Threads/Web Workers,保持主线程流畅。
- 内存与 GC:合理设置 –max-old-space-size;避免全局泄漏与闭包滥用;复用对象/缓存计算结果,降低 GC 压力。
- 大文件与数据:使用 Streams 进行流式处理,控制内存峰值与提升吞吐。
- 算法与数据结构:选择更高效的数据结构与算法,减少不必要的内存分配与拷贝。
- 日志与诊断:按需设置日志级别,采用异步日志(如 winston);使用 node --inspect 远程调试,结合 –prof 与 Chrome DevTools 定位瓶颈。
三 服务器与网络架构优化
- 反向代理与静态资源:用 Nginx 托管静态资源并开启缓存,Node.js 专注动态接口,降低事件循环压力。
- 负载均衡与扩展:通过 Nginx/HAProxy 做 Round Robin/Least Connections 等策略的负载均衡,横向扩展 Node.js 多实例(cluster)。
- 传输与安全:在 Nginx 终止 SSL/TLS 并启用 HTTP/2;必要时代理 WebSocket 以获得更好的长连接体验。
- 系统网络参数:结合业务场景优化 TCP keepalive、tcp_nopush/tcp_nodelay 等参数,减少连接开销与队头阻塞。
- 资源与健康:监控 CPU/内存/磁盘 I/O/网络,使用 Prometheus/Grafana 搭建可视化监控与告警。
四 数据层与缓存策略
- 高频数据缓存:使用 Redis/Memcached 缓存查询结果、会话与配置,减少数据库压力与响应时间。
- 数据库优化:为高频查询字段建立合适索引,优化慢 SQL,避免全表扫描;按需做读写分离与分页。
- 缓存层次:结合 浏览器缓存 + CDN 缓存 + 服务端内存缓存,形成多级缓存闭环,提升命中率与稳定性。
五 落地检查清单与优先级
- 快速收益:开启 Brotli/Gzip 与 HTTP/2;为静态资源设置强缓存;接入 CDN;将脚本改为 async/defer;用 Nginx 托管静态资源。
- 中等投入:接入 Redis 缓存;数据库加索引与连接池;接口做 代码分割/懒加载;关键动画改用 CSS3。
- 持续优化:建立 监控与日志(如 Prometheus/Grafana、异步日志与 logrotate);定期 压测与 A/B 测试;对热点路径进行 CPU/内存/堆快照 分析并迭代。