# 动态导入和懒加载

# 动态导入

假设有一个模块:

// module.js
export {
  a: 1,
  b: 2
}

# 静态导入

import {a, b} from './module.js'

静态导入是在JS引擎编译时(静态分析)执行,先于其他代码。

# 动态导入

async getModule() {
  const {a, b} = await import('./module.js')
}

动态导入是在JS运行时执行,ES6为了弥补静态导入的不足提供了import函数

import()返回一个Promise,value为module内容

import()类似require(),不过import()是异步加载,返回Promise,require()是同步加载,直接返回module

# 懒加载

# webpack分包技术

const module = () => import('./module.js')

如果使用webpack,webpack会对import()异步加载的模块进行分包处理,即单独打包,而不是放在一个主包内,可以降低主包的体积,提高首屏渲染速度。

const module = () => import(/* webpackChunkName: 'module'  */ './module.js')

可以通过配置为分包命名,格式如上。

# vue的异步组件技术

const component = () => import(/* webpackChunkName: 'component'  */ './component.vue')

Vue在注册组件时支持传入一个工厂函数,即返回一个Promise的函数,vue只有在加载该组件时才会调用该函数

所以结合import()和webpack分包技术可以实现组件的懒加载

上次更新: 2/13/2025, 3:29:47 AM