JavaScript优化页面加载速度需减少体积、提升解析执行效率、合理控制资源加载时机;核心手段包括Terser/SWC/esbuild压缩、动态导入与代码分割、type="module"启用、defer/async策略及精准polyfill。

JavaScript 优化页面加载速度,核心是减少体积、提升解析执行效率、合理控制资源加载时机。代码压缩只是其中一环,需结合多种手段协同优化。
减小 JS 文件体积
体积越小,下载越快,解析也越轻量。压缩工具能有效移除空格、注释、缩短变量名等:
- Terser:目前最主流的 JS 压缩工具,支持 ES6+ 语法,可配合 Webpack(v5+ 内置)、Rollup、Vite 或单独 CLI 使用。配置灵活,支持 mangling(混淆)、tree-shaking 辅助、保留特定注释等。
- SWC:Rust 编写的超快编译/压缩工具,压缩能力接近 Terser,但速度通常快 3–5 倍,适合大型项目或 CI 环境。可通过 @swc/cli 或集成到打包器中使用。
-
esbuild:同样基于 Rust,主打极致构建速度,内置压缩功能(
--minify),适合快速交付或作为预构建压缩步骤,对高级混淆支持较弱但日常足够。
按需加载与拆分代码
避免把所有逻辑打包进一个大文件。用户首次访问只需关键 JS,其余延迟加载:
- 用
import()动态导入实现路由级或组件级代码分割(如 React.lazy + Suspense)。 - Webpack 的
SplitChunksPlugin或 Vite 的默认自动分割,可提取公共依赖(如 lodash、moment)为独立 chunk,利于缓存复用。 - 第三方库尽量用官方提供的 ES 模块版本(如
lodash-es),便于 tree-shaking。
提升解析与执行效率
浏览器下载 JS 后需解析、编译、执行,这些阶段也能优化:
立即学习“Java免费学习笔记(深入)”;
- 启用
type="module"脚本:天然支持 defer,且现代语法更易被 V8 优化;配合nomodule回退兼容旧浏览器。 - 避免内联大段脚本:阻塞 HTML 解析,且无法缓存;优先外链 + HTTP 缓存策略(如
Cache-Control: public, max-age=31536000)。 - 减少运行时 polyfill:用 @babel/preset-env 按目标浏览器精准注入必要垫片,避免全量 core-js。
加载时机与资源优先级控制
让关键 JS 尽快执行,非关键 JS 不抢资源:
-
defer:适用于 DOM 构建后执行的通用脚本(如统计、非首屏交互),不阻塞解析,按顺序执行。 -
async:适用于完全独立、无依赖的脚本(如广告、埋点 SDK),下载时不阻塞,完成后立即执行(不保证顺序)。 - 用
loading="lazy"配合import()实现真正懒加载;对 script 标签还可配合fetchpriority="low"(Chrome 119+)降低网络优先级。
压缩工具选型建议:日常开发和构建推荐 Terser(生态成熟、可控性强);追求构建速度可试 SWC 或 esbuild;上线前做二次校验压缩可用 UglifyJS 在线版(仅限调试参考)。记住,压缩只是起点,加载策略和代码结构影响更大。










