JavaScript 实现模块懒加载的几种方式

JavaScript模块懒加载通过延迟加载非关键资源提升页面性能,以下是主流实现方式:

一、原生动态导入(推荐方案)

通过ES2020的import()函数实现异步加载,返回Promise对象:

javascript

button.addEventListener('click', async () => { const module = await import('./module.js'); // 动态加载模块 module.doSomething(); // 执行模块方法 });

▲ 特性:

  • 浏览器原生支持,无需额外库。
  • 自动代码分割(code splitting)。
  • 与Webpack/Rollup等构建工具无缝集成。

二、传统模块加载方案

1. Webpack特定语法

javascript

require.ensure([], () => { const module = require('./module'); module.doSomething(); }, 'chunk-name'); // 命名代码块

▲ 适用场景:

  • 兼容旧版Webpack项目。
  • 需显式控制代码块命名。
2. 动态Script注入

原生JS实现的通用方案:

javascript

function loadModule(src) { return new Promise((resolve) => { const script = document.createElement('script'); script.src = src; script.onload = resolve; document.head.appendChild(script); }); } // 使用示例 loadModule('module.js').then(() => { // 模块加载完成后执行 });

▲ 优势:

  • 兼容所有浏览器环境。
  • 支持非模块化脚本加载。

三、进阶优化策略

  1. 交互驱动加载
    结合用户行为(点击/滚动)触发模块加载,减少初始负载。
  2. 预加载提示
    使用<link rel="preload">声明重要模块优先级。
  3. 缓存策略
    通过Service Worker缓存已加载模块,提升二次访问速度。

优先采用原生import()方案,旧项目可渐进式迁移至动态导入。对于图片/视频等资源懒加载,推荐使用IntersectionObserver API实现。

相关推荐
晓晓hh6 小时前
JavaSE学习——迭代器
java·开发语言·学习
Laurence6 小时前
C++ 引入第三方库(一):直接引入源文件
开发语言·c++·第三方库·添加·添加库·添加包·源文件
kyriewen116 小时前
你点的“刷新”是假刷新?前端路由的瞒天过海术
开发语言·前端·javascript·ecmascript·html5
014-code6 小时前
String.intern() 到底干了什么
java·开发语言·面试
421!7 小时前
GPIO工作原理以及核心
开发语言·单片机·嵌入式硬件·学习
摇滚侠7 小时前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js
@insist1237 小时前
网络工程师-生成树协议(STP/RSTP/MSTP)核心原理与应用
服务器·开发语言·网络工程师·软考·软件水平考试
Timer@8 小时前
LangChain 教程 04|Agent 详解:让 AI 学会“自己干活“
javascript·人工智能·langchain
野生技术架构师8 小时前
2026年牛客网最新Java面试题总结
java·开发语言
环黄金线HHJX.8 小时前
Tuan符号系统重塑智能开发
开发语言·人工智能·算法·编辑器