路由懒加载
文章目录前言一、基本原理1.1 动态 import 拆分 chunk1.2 与同步引入对比二、Webpack 魔法注释2.1 自定义 chunk 名称2.2 prefetch空闲时预加载2.3 preload并行高优先级加载2.4 prefetch vs preload三、Vite 批量注册路由3.1 import.meta.glob3.2 按模块分组四、defineAsyncComponent 与路由懒加载4.1 区别五、典型场景5.1 中后台按业务模块懒加载5.2 权限路由动态加载5.3 首屏同步 其余懒加载六、面试聚焦6.1 prefetch 与 preload 区别6.2 懒加载的组件会重复请求吗6.3 路由懒加载 vs defineAsyncComponent七、易混淆点八、思考与练习总结前言路由懒加载是 Vue SPA 首屏优化的常用手段通过动态import()将页面组件拆成独立 chunk访问时才加载。本篇会讲清楚路由懒加载的原理与写法Vite 批量注册与 prefetch / preload 区别defineAsyncComponent 与路由懒加载的场景区别一、基本原理1.1 动态 import 拆分 chunkconstroutes[{path:/,component:()import(/views/Home.vue)// 懒加载},{path:/user,component:()import(/views/User.vue)},{path:/order,component:()import(/views/Order.vue)}]工作流程构建工具Webpack / Vite为每个动态import()生成独立 chunk 文件带 content hash首屏只加载当前路由所需代码其余 chunk 不下载用户导航到对应路由时浏览器再请求该 chunkchunk 下载完成后渲染页面组件1.2 与同步引入对比// ❌ 同步引入所有页面打包进主 bundle首屏体积大importHomefrom/views/Home.vueimportUserfrom/views/User.vueimportOrderfrom/views/Order.vue// ✅ 懒加载按路由拆分首屏只加载 Homecomponent:()import(/views/User.vue)对比项同步引入路由懒加载首屏体积大全部页面小当前页面加载时机应用启动时导航到该路由时适用场景首屏必需页面非首屏业务页面二、Webpack 魔法注释2.1 自定义 chunk 名称constroutes[{path:/order,component:()import(/* webpackChunkName: order *//views/Order.vue)}]// 生成文件order.[hash].js便于调试和缓存分析2.2 prefetch空闲时预加载{path:/dashboard,component:()import(/* webpackPrefetch: true *//views/Dashboard.vue)}浏览器在空闲时提前下载该 chunk用户后续导航时可更快渲染。适合「很可能接下来会访问」的页面。2.3 preload并行高优先级加载{path:/critical,component:()import(/* webpackPreload: true *//views/Critical.vue)}与父 chunk并行加载优先级高。适合当前页面很快就要用到的模块。2.4 prefetch vs preload对比项preloadprefetch加载时机与父 chunk 并行浏览器空闲时优先级高低用途当前页面即将需要未来可能访问典型场景首屏关键子模块其他路由页面!-- preload --linkrelpreloadhrefcritical.jsasscript!-- prefetch --linkrelprefetchhrefdashboard.jsasscriptVite 生产构建同样支持这些 magic comment行为与 Webpack 类似。三、Vite 批量注册路由3.1 import.meta.glob页面较多时可批量扫描并自动生成懒加载路由// router/routes.jsconstmodulesimport.meta.glob(../views/**/*.vue)constroutesObject.entries(modules).map(([path,component]){// ../views/user/List.vue → /user/listconstroutePathpath.replace(../views,).replace(/\.vue$/,).replace(/\/index$/,).toLowerCase()return{path:routePath||/,component// 已是 () import() 形式}})3.2 按模块分组// 只扫描 admin 目录constadminModulesimport.meta.glob(../views/admin/**/*.vue)// eager: true 则同步加载非懒加载constsyncModulesimport.meta.glob(./dir/*.js,{eager:true})适合中后台系统大量页面模块的自动注册减少手动维护 routes 数组。四、defineAsyncComponent 与路由懒加载4.1 区别// 路由懒加载Vue Router 直接使用动态 import{path:/user,component:()import(/views/User.vue)}// defineAsyncComponent用于非路由场景的异步组件import{defineAsyncComponent}fromvueconstAsyncChartdefineAsyncComponent({loader:()import(/components/Chart.vue),loadingComponent:LoadingSpinner,errorComponent:ErrorDisplay,delay:200,timeout:10000})对比项路由懒加载defineAsyncComponent使用场景路由页面组件弹窗、Tab、动态组件加载配置NProgress / 全局 loadingloading / error / timeout代码分割按路由拆 chunk按组件拆 chunk路由场景直接用() import()即可需要 loading/error 降级时用defineAsyncComponent包装后再作为 component。五、典型场景5.1 中后台按业务模块懒加载constroutes[{path:/user,component:()import(/views/user/index.vue)},{path:/order,component:()import(/views/order/index.vue)},{path:/report,component:()import(/views/report/index.vue)}]5.2 权限路由动态加载// 根据角色动态 addRoute模块本身也是懒加载constadminRoutes[{path:/admin,component:()import(/layouts/AdminLayout.vue),children:[{path:users,component:()import(/views/admin/Users.vue)}]}]if(roleadmin){adminRoutes.forEach(routerouter.addRoute(route))}5.3 首屏同步 其余懒加载importHomefrom/views/Home.vue// 首屏同步加载constroutes[{path:/,component:Home},{path:/about,component:()import(/views/About.vue)},{path:/contact,component:()import(/views/Contact.vue)}]首屏关键页面同步引入其余全部懒加载平衡 FCP 与总体积。六、面试聚焦6.1 prefetch 与 preload 区别preload高优先级与父 chunk 并行当前页面很快需要prefetch低优先级浏览器空闲时加载未来可能访问的路由6.2 懒加载的组件会重复请求吗不会正常情况下。首次访问后 chunk 被浏览器缓存后续导航直接使用缓存。只有构建后文件 hash 变化发版更新才会重新请求。6.3 路由懒加载 vs defineAsyncComponent路由懒加载用于页面级代码分割defineAsyncComponent用于组件级异步加载可配置 loading/error 状态两者场景不同。七、易混淆点懒加载 ≠ 不加载首次进入该路由仍会请求 chunk只是不在首屏加载。chunk 会缓存除非 hash 变化否则不会重复下载。defineAsyncComponent 不替代路由懒加载路由直接用() import()更简洁。import.meta.glob 默认懒加载不加eager: true时返回的都是动态 import 函数。prefetch 不是立即加载在浏览器空闲时才预取不要与 preload 混用场景。八、思考与练习1.路由懒加载的原理是什么解析路由 component 使用动态import()构建工具拆成独立 chunk导航到该路由时才下载并执行减小首屏 bundle。2.prefetch 和 preload 如何选择解析preload 用于当前页面即将需要的模块高优先级并行prefetch 用于其他路由页面空闲时预取。3.懒加载后第二次访问还会请求吗解析不会重复请求浏览器已缓存该 chunk发版后 hash 变化才会重新下载。4.如何给路由切换加 Loading 效果解析常用 NProgress 配合路由守卫beforeEach 开始、afterEach 结束或使用defineAsyncComponent的loadingComponent配置加载态组件。5.Vite 如何批量注册懒加载路由constmodulesimport.meta.glob(../views/**/*.vue)// 遍历 modules 生成 routes 数组总结原理动态import()按路由拆分 chunk访问时才加载减小首屏体积魔法注释webpackChunkName命名、webpackPrefetch空闲预取、webpackPreload并行加载import.meta.globVite 批量扫描页面自动生成懒加载路由选型路由用() import()非路由异步组件用defineAsyncComponent

相关新闻

日式搬家科普:什么是一站式无忧搬家?广州顺风搬家打造本地高端搬家标杆

日式搬家科普:什么是一站式无忧搬家?广州顺风搬家打造本地高端搬家标杆

搬家,一直是都市生活中的一大难题。传统搬家普遍存在服务粗放、打包混乱、物品易损、收费隐形套路多、售后无保障等问题,也是搬家行业长期难以根治的痛点。随着消费升级,源自日本的日式搬家凭借精细化、全托管、透明化的服务模式,…

2026/6/23 1:21:10阅读更多 →
三套方法论,10个AI技能,我做了一个会自我进化的Obsidian知识库

三套方法论,10个AI技能,我做了一个会自我进化的Obsidian知识库

收藏夹吃灰、笔记找不到、灵感转眼忘——问题不是你不够努力,而是没有一套系统。 我花了两个月时间,把三套顶级方法论整合在一起,做了一个会自己整理的 Obsidian 知识库模板。 一套基于 PARA Zettelkasten LLM Wiki 三套方法论整合的知识…

2026/6/23 1:16:10阅读更多 →
UniCon:基于谱更新的高效对比学习对齐方法解析与实践

UniCon:基于谱更新的高效对比学习对齐方法解析与实践

1. 项目概述:为什么我们需要更快的对比学习对齐?在机器学习和计算机视觉领域,对比学习(Contrastive Learning)已经成为无监督或自监督学习的基石。它的核心思想很简单:让模型学会区分“相似”与“不相似”的…

2026/6/23 1:16:10阅读更多 →
光模块的发展趋势浅谈

光模块的发展趋势浅谈

光模块:AI算力时代的"高速公路"——2026年行业发展趋势深度解析在人工智能席卷全球的今天,当人们惊叹于大模型的智能涌现时,往往忽略了一个默默无闻却至关重要的角色——光模块。作为光电信号转换的核心器件,光模块是数…

2026/6/23 2:46:24阅读更多 →
OpenClaw:语义驱动的GitHub操作范式重构

OpenClaw:语义驱动的GitHub操作范式重构

1. OpenClaw 不是“另一个 CLI 工具”,而是 GitHub 操作范式的重写你有没有过这样的时刻:在终端里敲gh repo create,刚按下回车,脑子里已经浮现出接下来要输的七八条命令——git init、git add .、git commit -m "init"…

2026/6/23 2:46:24阅读更多 →
Chiplet技术与AI加速器的模块化设计优化

Chiplet技术与AI加速器的模块化设计优化

1. Chiplet技术革命:AI加速器的模块化进化 在半导体工艺逼近物理极限的今天,传统单片SoC设计面临三大困境:流片成本指数级增长(5nm工艺NRE成本超1亿美元)、良率随芯片面积增大而急剧下降、以及"内存墙"问题日…

2026/6/23 2:46:24阅读更多 →
同态加密神经网络推理优化:从算法轻量化到GPU加速的高并发实践

同态加密神经网络推理优化:从算法轻量化到GPU加速的高并发实践

1. 项目概述:当隐私计算遇上高并发推理最近在做一个挺有意思的项目,核心就一句话:让神经网络推理在加密数据上跑得飞快。听起来有点矛盾对吧?既要“同态加密”保证数据全程不解密,又要“高吞吐量”满足实际业务的海量请…

2026/6/23 2:46:24阅读更多 →
5分钟快速上手:input-overlay让你的直播操作清晰可见

5分钟快速上手:input-overlay让你的直播操作清晰可见

5分钟快速上手:input-overlay让你的直播操作清晰可见 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay 还在为直播时观众看不清你的键盘操作而烦恼吗&#xff…

2026/6/23 2:46:24阅读更多 →
收藏!普通人也能入场的3个高薪AI岗位,平均月薪超3万!

收藏!普通人也能入场的3个高薪AI岗位,平均月薪超3万!

2026年上半年AI人才市场持续火热,招聘量同比增长87%,平均薪资涨幅达18%。其中大模型应用工程师、AI内容运营/生成师、提示词工程师三个岗位缺口超过10万,平均月薪超3万。这些岗位更看重应用能力和跨领域经验,而非高深算法研究&…

2026/6/23 2:41:24阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →