
一、 什么是懒加载
懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。
二、为什么需要懒加载
在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时
三、如何与webpack配合实现组件懒加载
1、在webpack配置文件中的output路径配置chunkFilename属性
output: {
path: resolve(__dirname, 'dist'),
filename: options.dev ? '[name].js' : '[name].js?[chunkhash]',
chunkFilename: 'chunk[id].js?[chunkhash]',
publicPath: options.dev ? '/assets/' : publicPath
},
chunkFilename路径将会作为组件懒加载的路径
2、配合webpack支持的异步加载方法
复制代码 代码如下:
npm install --save-dev babel-core babel-loader babel-plugin-syntax-dynamic-import babel-preset-es2015
use: [{
loader: 'babel-loader',
options: {
presets: [['es2015', {modules: false}]],
plugins: ['syntax-dynamic-import']
}
}]
四、具体实例中实现懒加载
1、路由中配置异步组件
export default new Router({
routes: [
{
mode: 'history',
path: '/my',
name: 'my',
component: resolve => require(['../page/my/my.vue'], resolve),//懒加载
},
]
})
2、实例中配置异步组件
components: {
historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载
//historyTab: () => import('../../component/historyTab/historyTab.vue')
},
3、全局注册异步组件
Vue.component('mideaHeader', () => {
System.import('./component/header/header.vue')
})
五、配置异步组件实现懒加载的问题分析
1、多次进出同一个异步加载页面是否会造成多次加载组件?
答:否,首次需要用到组件时浏览器会发送请求加载组件,加载完将会缓存起来,以供之后再次用到该组件时调用
2、在多个地方使用同一个异步组件时是否造成多次加载组件?如:
//a页面
export default {
components: {
historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载
},
}
//b页面
export default {
components: {
historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载
},
}
答:否,理由同上
3、如果在两个异步加载的页面中分别同步与异步加载同一个组件时是否会造成资源重用? 如:
//a页面
import historyTab from '../../component/historyTab/historyTab.vue';
export default {
components: {
historyTab
},
}
//b页面
export default {
components: {
historyTab: resolve => {require(['../../component/historyTab/historyTab.vue'], resolve)},//懒加载
},
}
答: 会, 将会造成资源重用, 根据打包后输出的结果来看, a页面中会嵌入historyTab组件的代码, b页面中的historyTab组件还是采用异步加载的方式, 另外打包chunk;
解决方案: 组件开发时, 如果根页面没有导入组件的情况下,而是在其他异步加载页面中同时用到组件, 那么为实现资源的最大利用,在协同开发的时候全部人都使用异步加载组件
4、在异步加载页面中载嵌入异步加载的组件时对页面是否会有渲染延时影响?
答:会, 异步加载的组件将会比页面中其他元素滞后出现, 页面会有瞬间闪跳影响;
解决方案:因为在首次加载组件的时候会有加载时间, 出现页面滞后, 所以需要合理的进行页面结构设计, 避免首次出现跳闪现象;
六、懒加载的最终实现方案
1、路由页面以及路由页面中的组件全都使用懒加载
优点:(1)最大化的实现随用随载
(2)团队开发不会因为沟通问题造成资源的重复浪费
缺点:(1)当一个页面中嵌套多个组件时将发送多次的http请求,可能会造成网页显示过慢且渲染参差不齐的问题
2、路由页面使用懒加载, 而路由页面中的组件按需进行懒加载, 即如果组件不大且使用不太频繁, 直接在路由页面中导入组件, 如果组件使用较为频繁使用懒加载
优点:(1)能够减少页面中的http请求,页面显示效果好
缺点:(2)需要团队事先交流, 在框架中分别建立懒加载组件与非懒加载组件文件夹
3、路由页面使用懒加载,在不特别影响首页显示延迟的情况下,根页面合理导入复用组件,再结合方案2
优点:(1)合理解决首页延迟显示问题
(2)能够最大化的减少http请求, 且做其他他路由界面的显示效果最佳
缺点:(1)还是需要团队交流,建立合理区分各种加载方式的组件文件夹
七、采用第三种方案进行目录结构设计
八、具体代码实现设计
1、路由设计:
import Router from 'vue-router';
import Vue from 'vue';
Vue.use(Router);
export default new Router({
routes: [
{
mode: 'history',
path: '/home',
name: 'home',
component: resolve => require([URL], resolve),//懒加载
children: [
{
mode: 'history',
path: '/home/:name',
name: 'any',
component: resolve => require(['../page/any/any.vue'], resolve),//懒加载
},
]
},
{
mode: 'history',
path: '/store',
name: 'store',
component: resolve => require(['../page/store/store.vue'], resolve),//懒加载,
children: [
{
mode: 'history',
path: '/store/:name',
name: 'any',
component: resolve => require(['../page/any/any.vue'], resolve),//懒加载
},
]
},
{
mode: 'history',
path: '/my',
name: 'my',
component: resolve => require(['../page/my/my.vue'], resolve),//懒加载,
children: [
{
mode: 'history',
path: '/my/:name',
name: 'any',
component: resolve => require(['../page/any/any.vue'], resolve),//懒加载
},
]
},
]
})
(1)首层的路由根组件分别对应的tab页面
(2)根目录后跟着各个子路由页面,子路由采用动态路由配合路由的编程式导航再加上vuex,最优化提高开发效率
直接贴上代码:
/**
* Created by ZHANZF on 2017-3-20.
*/
//vuex配置
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
//路由组件存储器
routers: {}
},
getters: {
routers: state => {
return state.data;
}
},
mutations: {
//动态增加路由
addRouter: (state, data) => {
state.routers = Object.assign({}, state.routers, {
[data.name]: data.component
});
}
},
actions: {
acMethods({commit}) {
}
},
})
//根目录中注册路由组件
window.midea = {
registerRouter(name, component) {
Store.commit('addRouter', {
name: name,
component: component
})
}
};//页面使用路由导航
openAnyPage() {
midea.registerRouter('module', resolve => {require(['../module/module.vue'], resolve)});//懒加载
this.$router.push({path: '/home/module', query: {title: this.title}});
}
//页面中使用动态组件
<template>
<component :is="currentRouter" :moduleName="title">
</component>
</template>
<script src="./any.js">
export default {
data () {
return {
routeName: '',
currentRouter: '',
title: '',
}
},
created() {
this.routeName = this.$route.params.name;
this.title = this.$route.query.title;
this.currentRouter = this.$store.state.routers[this.routeName];
},
methods: {
}
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue2
# 组件懒加载
# 懒加载
# vue
# vue3 vite异步组件及路由懒加载实战示例
# Vue自定义图片懒加载指令v-lazyload详解
# 详解vue2路由vue-router配置(懒加载)
# vue2笔记 — vue-router路由懒加载的实现
# vue实现一个懒加载的树状表格实例
# Vue2 中自定义图片懒加载指令 v-lazy实例详解
# 加载
# 将会
# 首页
# 会有
# 首次
# 多个
# 推荐使用
# 是否会
# 官网
# 情况下
# 是在
# 不太
# 再加上
# 参差不齐
# 如果没有
# 会比
# 则可
# 贴上
# 也叫
# 即在
相关文章:
建站主机解析:虚拟主机配置与服务器选择指南
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
移民网站制作流程,怎么看加拿大移民官网?
小型网站制作HTML,*游戏网站怎么搭建?
高防服务器租用首荐平台,企业级优惠套餐快速部署
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何快速生成凡客建站的专业级图册?
建站之星如何助力网站排名飙升?揭秘高效技巧
如何在景安云服务器上绑定域名并配置虚拟主机?
网站制作软件有哪些,制图软件有哪些?
如何在万网自助建站中设置域名及备案?
建站之星×万网:智能建站系统+自助建站平台一键生成
如何选择高效便捷的WAP商城建站系统?
建站之星后台管理如何实现高效配置?
如何制作算命网站,怎么注册算命网站?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何构建满足综合性能需求的优质建站方案?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
广东专业制作网站有哪些,广东省能源集团有限公司官网?
Swift中swift中的switch 语句
制作表格网站有哪些,线上表格怎么弄?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
盐城做公司网站,江苏电子版退休证办理流程?
图册素材网站设计制作软件,图册的导出方式有几种?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
简历在线制作网站免费版,如何创建个人简历?
如何快速搭建高效WAP手机网站?
建站之星如何一键生成手机站?
如何用搬瓦工VPS快速搭建个人网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何通过商城自助建站源码实现零基础高效建站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
建站主机无法访问?如何排查域名与服务器问题
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何撰写建站申请书?关键要点有哪些?
表情包在线制作网站免费,表情包怎么弄?
如何在局域网内绑定自建网站域名?
网站制作壁纸教程视频,电脑壁纸网站?
linux top下的 minerd 木马清除方法
如何在云主机快速搭建网站站点?
建站之星会员如何解锁更多建站功能?
婚礼视频制作网站,学习*后期制作的网站有哪些?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何设计高效校园网站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何解决VPS建站LNMP环境配置常见问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。