Vue 路由懒加载
Vue 路由懒加载
随着 Web 应用的复杂性不断增加,性能优化成为了开发人员必须面对的挑战之一。Vue 路由懒加载是一项关键技术,它可以帮助我们提高 Web 应用的加载速度,从而提升用户体验。
在本篇技术博文中,我们将深入探讨 Vue 路由懒加载的背景、原理以及使用方法。我们还将分享一些优化和进阶技巧,帮助开发人员最大程度地发挥路由懒加载的优势。
通过深入了解和灵活应用 Vue 路由懒加载,你将能够提升 Web 应用的性能和用户体验。
1 路由懒加载的原理
路由懒加载是一种优化技术,用于延迟加载应用程序中的路由组件。它可以提高初始加载速度并减少资源消耗,特别适用于大型单页应用。
1.1 为什么要使用路由懒加载
当应用程序包含多个页面和路由时,如果在初始加载时将所有路由组件都打包到一个文件中,会导致初始加载时间变长,并且用户可能只访问其中的一小部分页面。这样就造成了资源浪费和性能下降。
使用路由懒加载可以将路由组件按需加载,只有在用户访问到对应的路由时才进行加载。这样可以减少初始加载时间,提升用户体验,同时也节省了不必要的资源消耗。
1.2 路由懒加载的工作原理
Vue 路由懒加载的实现依赖于动态导入(Dynamic Import)功能,该功能允许在需要时异步加载模块。
在 Vue 中,可以通过以下方式实现路由懒加载:
const Home = () => import('./views/Home.vue')
上述代码中,import() 函数用于动态导入 Home.vue 组件。当路由被触发时,该组件才会被异步加载。
1.3 静态导入和动态导入的区别
静态导入是指在编译时将模块打包到应用程序中,而动态导入是在运行时根据需要异步加载模块。
使用静态导入时,所有路由组件都会被打包到同一个文件中,这样可以提高初始加载速度。但如果应用程序较大,可能会导致打包文件过大,影响性能。
使用动态导入时,只有在用户访问对应路由时才会加载相应的组件,这样可以减少初始加载时间和资源消耗。但每次加载组件时都会发送网络请求,稍微增加了延迟。
综合考虑,通常建议在大型单页应用中使用路由懒加载来优化性能和用户体验。
2 开始使用路由懒加载
2.1 安装和配置路由懒加载的依赖
要开始使用路由懒加载,首先需要安装和配置 Vue Router。请确保你已经安装了 Vue 和 Vue Router。
- 使用 npm 或者 yarn 安装 Vue Router:
npm install vue-router
或
yarn add vue-router
- 在你的 Vue 项目中创建一个名为
router.js(或其他自定义名称)的文件,并在其中引入 Vue 和 Vue Router:
import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)
- 创建一个 Vue Router 实例并导出它:
export default new VueRouter({// 路由配置...
})
2.2 将路由配置为懒加载
要将路由配置为懒加载,你需要进行以下步骤:
- 首先,确保你已经安装了 Vue Router。如果没有安装,可以使用以下命令进行安装:
npm install vue-router
- 在你的路由配置文件中,使用动态导入来实现懒加载。你可以使用箭头函数和 import()、require.ensure 或 dynamic import 等方式进行动态导入。
下面是一个示例,展示如何使用箭头函数和 import()来实现懒加载:
import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)const router = new VueRouter({routes: [{path: '/',name: 'Home',component: () => import('@/views/Home.vue')},{path: '/about',name: 'About',component: () => import('@/views/About.vue')}]
})export default router
在上述代码中,import('@/views/Home.vue') 和 import('@/views/About.vue') 是通过箭头函数和 import()方法进行动态导入的。这样,在用户访问对应路由时,相关组件才会被异步加载,提高性能和用户体验。
请注意,@ 符号表示的是你的项目根目录,具体路径根据你的项目结构进行调整。
通过以上步骤,你就成功地将路由配置为懒加载了。每当用户访问相应的路由时,对应的组件将会被异步加载,从而减少初始加载时间和资源消耗。
2.3 动态导入组件的方式和代码示例
在 Vue 中,有多种方式可以实现动态导入组件。下面我将为你介绍几种常用的方式和相应的代码示例。
- 使用箭头函数和 import()
这是最常见的一种方式,使用箭头函数和import()方法来进行动态导入。
const router = new VueRouter({routes: [{path: '/',name: 'Home',component: () => import('@/views/Home.vue')},{path: '/about',name: 'About',component: () => import('@/views/About.vue')}]
})
在上述代码中,通过箭头函数和import()方法实现了对 @/views/Home.vue 和 @/views/About.vue 组件的动态导入。
- 使用 require.ensure
另一种常见的方式是使用require.ensure方法。
const router = new VueRouter({routes: [{path: '/',name: 'Home',component: (resolve) => {require.ensure(['@/views/Home.vue'], () => {resolve(require('@/views/Home.vue'))})}},{path: '/about',name: 'About',component: (resolve) => {require.ensure(['@/views/About.vue'], () => {resolve(require('@/views/About.vue'))})}}]
})
在上述代码中,使用require.ensure方法来异步加载组件,并通过回调函数的形式传递给component属性。
- 使用 dynamic import
还有一种方式是使用 ES6 的 dynamic import 语法。
const router = new VueRouter({routes: [{path: '/',name: 'Home',component: () => import('@/views/Home.vue')},{path: '/about',name: 'About',component: () => import('@/views/About.vue')}]
})
在上述代码中,通过import()方法来实现动态导入组件。
以上就是几种常用的动态导入组件的方式和相应的代码示例。你可以根据自己的项目需求选择其中一种方式来实现路由懒加载。
3 优化和进阶
3.1 预加载的概念和使用方式
预加载是一种优化技术,它可以在用户访问之前提前加载资源,以减少后续加载时的延迟。在 Vue Router 中,可以使用<router-link>组件的prefetch属性来实现路由的预加载。
<router-link>组件用于生成导航链接,在默认情况下,当鼠标悬停在链接上时,会自动触发预加载。你也可以通过手动设置prefetch属性为true或者指定一个回调函数来控制预加载的行为。
以下是一个示例:
<router-link to="/about" prefetch>关于我们</router-link>
这样,在用户浏览到该页面之前,与"/about"相关的资源将被提前加载,从而加快后续页面的加载速度。
3.2 使用路由懒加载时的组件懒加载
在 Vue 中,可以使用路由懒加载来按需加载路由组件,以提高初始加载时间和资源消耗。当用户访问某个路由时,相关的组件才会被异步加载。
要使用路由懒加载,首先需要安装和配置 Vue Router。然后,在路由配置文件中将组件配置为懒加载。
有多种方式可以实现组件的懒加载,例如使用箭头函数结合 import()、require.ensure 或 dynamic import 等。下面是一些示例:
使用箭头函数和 import():
const Home = () => import('./views/Home.vue');
const About = () => import('./views/About.vue');const routes = [{ path: '/', component: Home },{ path: '/about', component: About }
];
使用 require.ensure:
const routes = [{path: '/',component: resolve => require.ensure([], () => resolve(require('./views/Home.vue')))},{path: '/about',component: resolve => require.ensure([], () => resolve(require('./views/About.vue')))}
];
使用 dynamic import:
const routes = [{path: '/',component: () => import('./views/Home.vue')},{path: '/about',component: () => import('./views/About.vue')}
];
以上代码中,路由对应的组件会在需要时才被异步加载。这样可以减少初始加载时间,并且只有当用户访问到对应路由时,相关组件才会被加载,提高性能和用户体验。
3.3 懒加载的代码拆分和打包策略
在 Vue 中,使用 Webpack 进行代码拆分和打包策略是实现懒加载的关键。Webpack 提供了多种方式来配置分组懒加载。
一种常用的方式是使用动态导入(dynamic import)语法,在需要时异步加载模块。例如,在路由配置文件中可以将组件配置为箭头函数或使用 import()方法:
const Home = () => import('./views/Home.vue');
const About = () => import('./views/About.vue');
这样,在用户访问对应路由时,相关组件才会被异步加载。
另一种方式是使用 require.ensure 方法,它也支持按需加载模块。例如:
const Home = resolve => {require.ensure(['./views/Home.vue'], () => {resolve(require('./views/Home.vue'));});
};
以上两种方式都能够实现懒加载,具体选择哪种方式取决于个人偏好和项目需求。
3.4 Webpack 的分组懒加载配置
接下来,你还可以通过 Webpack 的 SplitChunksPlugin 插件来进一步优化打包策略。该插件可以将公共依赖模块抽离出来,避免重复加载,减小打包后的文件大小。
以下是一个示例的 Webpack 配置,展示了如何使用 SplitChunksPlugin 插件进行分组懒加载:
module.exports = {// ...其他配置optimization: {splitChunks: {cacheGroups: {commons: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}}
};
上述配置将会把所有来自 node_modules 目录下的模块打包到一个名为 vendors 的文件中。
通过合理配置 Webpack,你可以实现更加灵活和高效的懒加载策略,从而提升应用性能和用户体验。
4 与其他优化策略的结合
4.1 使用路由懒加载与代码分割等优化策略的关系
使用路由懒加载和代码分割是一种常见的优化策略组合,它们可以相互配合以提升应用性能和用户体验。
路由懒加载通过将路由组件按需加载,减少了初始加载时间和资源消耗。当用户访问某个路由时,才会异步加载该路由对应的模块,而不是在应用初始化时一次性加载所有路由组件。这样可以加快初始加载速度,并且只加载当前需要的模块,节省了带宽和内存资源。
代码分割(Code Splitting)是指将应用代码拆分成多个较小的代码块,在需要时再动态加载。通过代码分割,可以将应用的代码拆分为多个文件,每个文件包含一个或多个模块,然后根据需要进行按需加载。这样做可以减小单个文件的大小,提高页面响应速度,并且允许并行加载多个代码块,进一步提升性能。
使用路由懒加载和代码分割的组合策略可以使得应用的初始加载时间更短,并且在用户浏览过程中实现按需加载,避免不必要的资源消耗。这对于大型应用或包含大量路由的应用特别有用。
4.2 优化 Vue 路由懒加载的进阶技巧
除了基本的路由懒加载方式,还有一些进阶技巧可以帮助进一步优化 Vue 的路由懒加载:
-
使用 Webpack 的 SplitChunksPlugin 插件进行分组懒加载:通过配置 SplitChunksPlugin 插件,可以将公共依赖模块抽离出来,并生成单独的代码块。这样做可以避免重复加载相同的依赖模块,减小每个代码块的体积,提高缓存效果和加载速度。
-
预加载关键路由:对于某些核心页面或用户经常访问的页面,可以使用预加载(Preloading)策略,在初始加载完成后立即开始异步加载这些页面的代码。这样可以在用户需要时更快地展示相关内容,提升用户体验。
-
按需加载子模块:在路由组件中可能存在多个子模块,如果所有子模块都放在一个文件中,会导致该文件过大。为了进一步优化加载性能,可以将子模块拆分成更小的代码块,并根据需要按需加载。
以上是一些优化 Vue 路由懒加载的进阶技巧,可以根据具体项目的需求和特点来选择适合的优化策略。
5 总结
通过本篇技术博文的学习,我们深入了解了 Vue 路由懒加载的原理和应用。路由懒加载是提升 Web 应用性能的关键技术之一,它能帮助我们在应用中实现按需加载,提高加载速度,优化用户体验。
在使用路由懒加载时,我们学会了安装和配置依赖,将路由配置为懒加载,并使用动态导入组件的方式来延迟加载页面。我们还探讨了预加载、组件懒加载、代码拆分和打包策略等进阶技巧,帮助开发人员进一步提升应用性能。
当然,除了路由懒加载,我们还可以与其他优化策略相结合,如代码分割等,实现更完善的性能优化。通过灵活应用这些技术,我们可以为用户提供更快速、流畅的 Web 应用体验。
如果您是一个开发人员,希望您能在您的项目中尝试使用 Vue 路由懒加载,从而提升您的应用性能。如果您是一个初学者,希望这篇博文能够帮助您在 Vue 开发中更好地应用路由懒加载这一重要技术。
感谢您阅读本篇博文。我们希望您能够在您的开发实践中应用所学知识,并取得优秀的结果!请继续关注更多有关 Vue 和性能优化的技术文章,我们期待为您带来更多有价值的内容。
祝您在 Vue 开发中取得更大的成功!
相关文章:
Vue 路由懒加载
Vue 路由懒加载 随着 Web 应用的复杂性不断增加,性能优化成为了开发人员必须面对的挑战之一。Vue 路由懒加载是一项关键技术,它可以帮助我们提高 Web 应用的加载速度,从而提升用户体验。 在本篇技术博文中,我们将深入探讨 Vue 路…...
软件设计师(七)面向对象技术
面向对象: Object-Oriented, 是一种以客观世界中的对象为中心的开发方法。 面向对象方法有Booch方法、Coad方法和OMT方法等。推出了同一建模语言UML。 面向对象方法包括面向对象分析、面向对象设计和面向对象实现。 一、面向对象基础 1、面向对象的基本…...
Qt中将信号封装在一个继承类中的方法
QLabel标签类对应的信号如下: Qt中标签是没有双击(double Click)这个信号的; 需求一:若想双击标签使其能够改变标签中文字的内容,那么就需要自定义一个“双击”信号,并将其封装在QLabel类的派生…...
Docker介绍
1. docker是什么 1.1 为什么会有docker出现? 假设你在开发一个项目的时候,你使用的是windows系统而且你的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。你正在开发的应用依赖于你当前的配置而且还要依赖于某些配置文件。此外…...
C++红黑树
一、红黑树的概念 红黑树是一种二叉搜索树,在其每个节点上增加一个存储位用于表示节点的颜色,可以是Red或Black 通过对任何一条从根到叶子的路径上的各个节点着色方式的限制,红黑树确保没有一条路径比其他路径长两倍 红黑树的性质ÿ…...
LangChain与大模型的学习ing
大模型的菜鸟初学习 一、问题记录1、库的版本问题 二、实例记录1、公司名生成2、提示模板的使用3、LLM Chain4、LLMMemory5、聊天语言API 参考资料 一、问题记录 1、库的版本问题 openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(ho…...
Go把Map转成对象
最近使用了Redis的Hash,把一个对象给存储到了hash里面,具体如下: 现在需要从RedisHash缓存里面把结果给取出来,同时赋值到一个对象上面 result, err : global.GVA_REDIS.HGetAll(context.Background(), key).Result() 问题是resul…...
Java-网络编程
TCP TCP(Transmission Control Protocol)是一种在计算机网络中用于可靠数据传输的协议。它是一种面向连接的协议,确保数据在发送和接收之间的可靠性和有序性。以下是TCP是如何工作的简要概述: 建立连接: 当两台计算机…...
[数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1510 标注数量(xml文件个数):1510 标注类别数:2 标注类别名称:["keng","…...
全网最详细,Pytest自动化测试框架-Fixture固件实战,你要的都有...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么是固件 Fixt…...
React 入门学习
React 入门 一、基本认识1.1、前言1.2、什么是1.3、编译<br>1.4、特点1.5、高效 二、React环境和基本使用2.1、环境搭建2.2、脚手架项目基本使用2.2.1、src2.2.2、public2.2.3、package.json 三、JSX的理解和使用四、模块与模块化, 组件与组件化的理解4.1、模块与组件4.2…...
VMware vCenter 6.5 断电后无法启动修复方案
目录 第1章 前言 第2章 问题现象 第3章 解决方案 第4章、Tips 第1章 前言 本文主要介绍VMware vcsa 6.5由于电源异常/存储异常之后无法启动,进入磁盘自检模式处理方法。(最近遇到类似情况比较多,Citrix Xenserver也遇到了,后来…...
c++ STL--算法,迭代器,容器适配器,仿函数
c STL–算法,迭代器,容器适配器,仿函数 一.算法 1.使用的头文件为 #include<algorithm>//以这个头文件为主 #include<numeric>2.关于算法一些功能的使用 1.遍历 void fun1(int x) {cout << x << " "…...
springcloud3 bus+springconfig 实现配置文件的动态刷新(了解)
一 springcloud Bus的作用 1.1 springcloud的作用 spring cloud bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架。 它整合了java的事件处理机制和消息中间件的功能。其中目前支持RabbitMQ和kafka 简介: bus实现多个服务的配置文件动态刷新。 1.2 …...
SpringMVC的架构有什么优势?——视图与模型(二)
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄ÿ…...
Vue中实现图片懒加载简单说明
1.安装 npm i vue-lazyload1.2.6 2.导入 import VueLazyload from "vue-lazyload"; 3.注册插件 说明:main.js文件 import imgs_src from "src" Vue.use(VueLazyload, {// 懒加载默认图片loading:"imgs_src" }); 4.前台 说明:vue文…...
zookeeper案例
目录 案例一:服务器动态上下线 服务端: (1)先获取zookeeper连接 (2)注册服务器到zookeeper集群: (3)业务逻辑(睡眠): 服务端代码…...
项目中使用git vscode GitHubDesktopSetup-x64
一、使用git bash 1.使用git bash拉取gitee项目 1.在本地新建一个文件夹(这个文件夹是用来存放从gitee上拉下来的项目的) 2.在这个文件夹右键选择 git bash here 3.输入命令 git init (创建/初始化一个新的仓库) 4.输入命令 git remote add origin …...
【Linux操作系统】文件描述符fd
🔥🔥 欢迎来到小林的博客!! 🛰️博客主页:✈️林 子 🛰️博客专栏:✈️ Linux之路 🛰️社区 :✈️ 进步学堂 …...
【RocketMQ入门-安装部署与Java API测试】
【RocketMQ入门-安装部署与Java API测试】 一、环境说明二、安装部署三、Java API 编写Producer和Consumer进行测试四、小结 一、环境说明 虚拟机VWMare:安装centos7.6操作系统源码包:rocketmq-all-5.1.3-source-release.zip单master部署,在…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
