动态 import() 是 javascript 原生按需加载机制,支持运行时模块拆分、懒加载与代码分割,减少首屏体积;返回 promise,调用时才加载,适用于路由、弹窗等非首屏功能,配合 try/catch、防抖、构建工具 chunk 分割及框架封装可优化体验。

动态 import() 是 JavaScript 原生支持的按需加载机制,它让大型应用能真正实现运行时模块拆分、懒加载和代码分割,大幅减少首屏体积。
用 import() 替代静态 import 实现懒加载
静态 import 会在模块解析阶段立即加载所有依赖,而 import() 返回一个 Promise,在调用时才发起网络请求并执行模块代码。适合路由、弹窗、图表等非首屏必需功能。
- 把路由组件从
import Page from './Page.js'改为函数内调用:const { default: Page } = await import('./Page.js') - 配合
try/catch处理加载失败(如网络中断、404):catch中可展示错误提示或降级 UI - 避免在循环或高频事件中无节制调用,防止并发请求过多;可加简单防抖或状态锁
配合 Webpack/Vite 自动生成 chunk 文件
现代构建工具会自动识别 import() 并将目标模块及其依赖打包成独立 chunk(如 Page.abc123.js),无需额外配置。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Vite 默认启用,Webpack 需确保
optimization.splitChunks开启(默认已开) - 可在
import()参数中加 webpack 特殊注释(Vite 也兼容):import(/* webpackChunkName: "page-home" */ './Home.js'),让生成的文件名更语义化 - 构建后查看
dist目录,确认新 chunk 出现且主包体积明显减小
在 React/Vue 中封装成可复用的懒加载组件
不建议每次手动写 import().then,应封装为高阶组件或组合式函数,统一处理 loading、error、缓存逻辑。
- React 示例:用
React.lazy+Suspense(底层即基于import()),或自定义 hook 如useAsyncModule(() => import('./Chart.js')) - Vue 示例:直接在
defineAsyncComponent中传入import()函数,支持loading和error插槽 - 对同一模块多次调用
import(),浏览器和构建工具会自动去重(Promise 缓存),无需手动 memoize
注意加载时机与用户体验优化
懒加载不是“越懒越好”,关键路径上的模块仍需合理预加载,否则用户感知卡顿。
- 路由切换前预加载:比如鼠标悬停导航项时,用
import()提前触发加载(不 await),提升点击后响应速度 - 滚动到视区再加载:结合
IntersectionObserver,对长列表中的复杂子组件做条件加载 - 服务端渲染(SSR)需同步处理:Node 环境不支持
import()动态路径,需用require()或构建时静态分析保障一致性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










