【vue-router】Vue-router如何实现路由懒加载

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,云原生开发,前后端框架,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S集群搭建与管理,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:前端零基础,实战进阶教学
景天的主页:景天科技苑

文章目录

  • Vue-Router路由懒加载
    • 一、Vue-Router简介
    • 二、什么是路由懒加载
    • 三、路由懒加载的实现方式
      • 1. 箭头函数+import
      • 2. 箭头函数+require
      • 3. require.ensure
    • 四、动态路由和懒加载
      • 1. 定义动态路由
      • 2. 获取动态参数
    • 五、路由懒加载的最佳实践
      • 1. 合理使用代码分割
      • 2. 使用Webpack的prefetch和preload指令

Vue-Router路由懒加载

在现代前端开发中,Vue.js凭借其轻量级和易用性,成为了很多开发者的首选框架。然而,在构建大型单页应用(SPA)时,初始加载时间可能会变得非常长,影响用户体验。为了解决这个问题,Vue.js引入了路由懒加载机制。本文将结合实际案例,详细讲解Vue-Router路由懒加载的用法。

一、Vue-Router简介

Vue Router是Vue.js官方的路由管理器,它允许你以一种简单的方式构建单页面应用中的页面路由。Vue Router提供了强大的路由管理功能,包括嵌套路由、动态路由、路由守卫等。

要使用Vue Router,首先需要安装它。你可以通过npm或yarn进行安装:

npm install vue-router
# 或者
yarn add vue-router

安装完成后,你需要在Vue项目中配置Vue Router。下面是一个简单的配置示例:

import Vue from 'vue';
import Router from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';Vue.use(Router);const router = new Router({routes: [{ path: '/', component: Home },{ path: '/about', component: About },],
});export default router;

在上述代码中,我们定义了两个路由:首页(/)和关于页(/about)。当用户访问这些路由时,对应的组件会被渲染到页面上。

二、什么是路由懒加载

在构建大型单页应用时,如果将所有路由和组件都打包在一起,会导致初始加载时间非常长。为了解决这个问题,Vue.js引入了路由懒加载机制。路由懒加载是指只有在需要访问某个路由时,才加载该路由对应的组件代码。这样可以显著减少初始加载时间,提高应用程序的性能。

Vue Router的懒加载依赖于Webpack的代码分割功能。Webpack会将每个懒加载的组件打包成一个独立的代码块(chunk),并在需要时动态加载。

三、路由懒加载的实现方式

Vue Router的懒加载可以通过多种方式实现,主要包括箭头函数+import、箭头函数+require以及require.ensure等。以下是这些方式的详细介绍和示例。

1. 箭头函数+import

这是Vue Router懒加载中最推荐的方式,因为它语法简洁、直观易懂,并且符合现代JavaScript标准。使用箭头函数和import()函数可以实现路由的懒加载。

const Home = () => import('./components/Home.vue');
const About = () => import('./components/About.vue');const router = new Router({routes: [{ path: '/', component: Home },{ path: '/about', component: About },],
});

在上述代码中,Home和About组件都是通过箭头函数和import()函数实现的懒加载。当用户访问首页或关于页时,对应的组件才会被加载。

你还可以为生成的代码块指定名称,以便更好地管理和调试。

const Home = () => import(/* webpackChunkName: "home" */ './components/Home.vue');
const About = () => import(/* webpackChunkName: "about" */ './components/About.vue');

这样,Webpack会将Home和About组件分别打包成名为home.jsabout.js的代码块。

2. 箭头函数+require

在一些旧版本的构建工具中,你可能会看到使用箭头函数和require()函数来实现路由懒加载的方式。虽然这种方式仍然有效,但相对于箭头函数+import来说,它的语法相对复杂,不够直观。

const router = new Router({routes: [{path: '/',component: resolve => require(['./components/Home.vue'], resolve),},{path: '/about',component: resolve => require(['./components/About.vue'], resolve),},],
});

在上述代码中,Home和About组件都是通过箭头函数和require()函数实现的懒加载。当用户访问首页或关于页时,对应的组件才会被加载。

需要注意的是,require()函数是CommonJS规范中的模块导入方式,而在现代JavaScript开发中,ES6的import/export规范更为常用。因此,推荐使用箭头函数+import的方式来实现路由懒加载。

3. require.ensure

require.ensure是Webpack 1.x版本中用于代码分割和懒加载的API。然而,在Webpack 2.x及以上版本中,require.ensure已经被废弃,推荐使用动态import(即import()函数)来替代。因此,在现代Vue项目中,你几乎不会看到使用require.ensure来实现路由懒加载的情况。

不过,为了完整性,这里还是简单介绍一下require.ensure的用法。

const Home = r => require.ensure([], () => r(require('./components/Home.vue')), 'home');
const About = r => require.ensure([], () => r(require('./components/About.vue')), 'about');const router = new Router({routes: [{ path: '/', component: Home, name: 'Home' },{ path: '/about', component: About, name: 'About' },],
});

在上述代码中,Home和About组件都是通过require.ensure实现的懒加载。然而,由于require.ensure已经被废弃,这种方式在现代Vue项目中不再推荐使用。

四、动态路由和懒加载

在Vue Router中,动态路由允许你定义路径时使用占位符,这些占位符将会被实际的数值所替代。通过动态路由和懒加载的结合,你可以实现更加灵活和高效的路由管理。

1. 定义动态路由

动态路由的定义非常简单,只需要在路径中使用占位符即可。例如,定义一个动态路由/user/:id,其中:id就是动态的参数。

const UserProfile = () => import('./components/UserProfile.vue');const router = new Router({routes: [{ path: '/user/:id', component: UserProfile, name: 'UserProfile' },],
});

在上述代码中,我们定义了一个动态路由/user/:id,并为其指定了UserProfile组件。当用户访问/user/123时,UserProfile组件会被加载,并且可以通过$route.params.id来获取传递过来的动态参数id

2. 获取动态参数

在组件中,你可以通过$route.params来获取传递过来的动态参数。例如,在UserProfile组件中,你可以这样获取id参数:

export default {created() {console.log(this.$route.params.id); // 输出传递过来的id参数},
};

五、路由懒加载的最佳实践

在使用Vue Router的懒加载功能时,有一些最佳实践可以帮助你更好地优化应用程序的性能和用户体验。

1. 合理使用代码分割

代码分割是Webpack的一个重要功能,它可以将代码拆分成多个独立的代码块,并在需要时动态加载。在使用Vue Router的懒加载功能时,你应该合理使用代码分割,将不同的路由组件拆分成不同的代码块。

例如,你可以将首页、关于页、用户详情页等不同的路由组件拆分成不同的代码块,并在需要时动态加载它们。

const Home = () => import(/* webpackChunkName: "home" */ './components/Home.vue');
const About = () => import(/* webpackChunkName: "about" */ './components/About.vue');
const UserProfile = () => import(/* webpackChunkName: "userProfile" */ './components/UserProfile.vue');const router = new Router({routes: [{ path: '/', component: Home, name: 'Home' },{ path: '/about', component: About, name: 'About' },{ path: '/user/:id', component: UserProfile, name: 'UserProfile' },],
});

2. 使用Webpack的prefetch和preload指令

Webpack提供了prefetch和preload指令,可以帮助你更好地优化代码的加载性能。prefetch指令会在浏览器空闲时预加载指定的代码块,而preload指令则会在当前代码块加载时立即预加载指定的代码块。

你可以在使用Vue Router的懒加载功能时,结合Webpack的prefetch和preload指令来进一步优化代码的加载性能。

const Home = () => import(/* webpackPrefetch: true */ './components/Home.vue');
const About = () => import(/* webpackPreload: true */ './components/About.vue');const router = new Router({routes: [{ path: '/', component: Home, name: 'Home' },{ path: '/about', component: About, name: 'About' },],
});

在上述代码中,我们使用了Webpack的prefetch和preload指令来优化Home和About组件的加载性能。需要注意的是,preload指令通常用于关键路径上的代码块,而prefetch指令则用于非关键路径上的代码块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdlbits系列verilog解答(Exams/m2014 q4a)-86

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节学习如何下图中的锁存器电路。 注意图中电路是锁存器,因此quartus会警告说推导出一个锁存器。 模块声明 module top_module ( input d, input ena, output q); 思路: 锁存器是一种对脉冲电平敏感的存储…

成都睿明智科技有限公司抖音电商服务的新引擎

在这个短视频风起云涌的时代,抖音不仅成为了人们休闲娱乐的首选,更是商家们竞相角逐的电商新蓝海。在这片充满机遇与挑战的海域中,成都睿明智科技有限公司如同一艘装备精良的航船,引领着众多企业向抖音电商的深水区进发。今天&…

leetcode:637二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的平均值为 …

Java多线程介绍及使用指南

“多线程”:并发 要介绍线程,首先要区分开程序、进程和线程这三者的区别。 程序:具有一定功能的代码的集合,但是是静态的,没有启动运行 进程:启动运行的程序【资源的分配单位】 线程:进程中的…

独家|京东调整职级序列体系

原有的M、P、T、S主序列将正式合并为新的专业主序列P。 作者|文昌龙 编辑|杨舟 据「市象」独家获悉,京东已在近日在内部宣布对职级序列体系进行调整,将原有的M、P、T、S主序列正式合并为新的专业主序列P,合并后的职级体系将沿用原有专业序…

mysql 存储结构的进化之路

文章目录 前言一、线性结构二、二叉树(BST)三、平衡二叉树(AVL)四、多路平衡查找树(B Tree)五、加强版多路平衡查找树(B Tree)总结 前言 树形结构是一种具有层次关系的数据结构&…

RHCE作业五-shell脚本

一要求: 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务 ​ 没有安装;安装对应的软件包 3.测试 判断服务…

Java基础之控制语句:开启编程逻辑之门

一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类,它们在程序中起着至关重要的作用,能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径,主要包括 if 语句和 switch 语句。if 语句有…

CSS新特性(11)

一.计算盒子宽度calc函数,可以用加减乘除来计算 -*/ 让父盒子永远比子盒子小30像素 二.CSS3过渡transition搭配hover一起使用 该盒子宽度可以从200px到400px,谁做变化给谁加 不仅要写宽还要写高利用逗号,多个属性一起写都用逗号 既想要宽度变又想要高度…

MacOS 配置github密钥

MacOS 配置github密钥 1. 生成GitHub的SSH密钥对 ssh-keygen -t ed25519 -C "xxxxxxx.com" -f ~/.ssh/id_ed25519_github 其中 xxxxxxxxxxx.com 是注册github、gitee和gitlab的绑定账号的邮箱 -t ed25519:生成密钥的算法为ed25519(ed25519比rsa速度快&…

linux cenos redis 单机部署

编译安装redis(Centos) 编译安装前先安装编译基础环境: yum install -y gcc gcc-c yum install -y readline-devel yum install -y zlib-devel yum -y install pcre yum -y install pcre-devel yum -y install openssl yum -y instal…

TI毫米波雷达(七)——high accurary示例分析(二)

概述 之前分析了IWR6843上的高精度测距程序框架,虽然可以看到大致的系统运行过程,但是总有一种“混乱”的感觉。TI为了展现ARM与DSP协作能力将如此“简单”的一个功能分布在多处理器上,结合BIOS以及semaphore、event、mailbox等机制&#xff…

鸿蒙修饰符

文章目录 一、引言1.1 什么是修饰符1.2 修饰符在鸿蒙开发中的重要性1.3 修饰符的作用机制 二、UI装饰类修饰符2.1 Styles修饰符2.1.1 基本概念和使用场景2.1.2 使用示例2.1.3 最佳实践 2.2 Extend修饰符2.2.1 基本概念2.2.2 使用示例2.2.3 Extend vs Styles 对比2.2.4 使用建议…

架构-微服务-服务配置

文章目录 前言一、配置中心介绍1. 什么是配置中心2. 解决方案 二、Nacos Config入门三、Nacos Config深入1. 配置动态刷新2. 配置共享 四、nacos服务配置的核心概念 前言 服务配置--Nacos Config‌ 微服务架构下关于配置文件的一些问题: 配置文件相对分散。在一个…

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集 数据集分割 4070总图像数 训练组 87% 3551图片 有效集 9% 362图片 测试集 4% 157图片 预处理 自动定向…

Next.js -服务端组件如何渲染

#题引:我认为跟着官方文档学习不会走歪路 服务器组件渲染到客户端发生了什么? 请求到达服务器 用户在浏览器中请求一个页面。 Next.js 服务器接收到这个请求,并根据路由找到相应的页面组件。服务器组件的渲染 Next.js 识别出请求的页面包含…

架构03-事务处理

零、文章目录 架构03-事务处理 1、本地事务实现原子性和持久性 (1)事务类型 **本地事务:**单个服务、单个数据源**全局事务:**单个服务、多个数据源**共享事务:**多个服务、单个数据源**分布式事务:**多…

基于深度学习的手势识别算法

基于深度学习的手势识别算法 概述算法原理核心逻辑效果演示使用方式参考文献 概述 本文基于论文 [Simple Baselines for Human Pose Estimation and Tracking[1]](ECCV 2018 Open Access Repository (thecvf.com)) 实现手部姿态估计。 手部姿态估计是从图像或视频帧集中找到手…

硬件基础22 反馈放大电路

目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…