首页 > 其他分享 >Vue中的懒加载和按需加载

Vue中的懒加载和按需加载

时间:2023-05-19 15:34:29浏览次数:41  
标签:index vue Vue import Router 加载


1. 懒加载

  • 懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。
  • vue项目打包的时候,如果项目比较庞大,那么将会打出一个很大的包,速度比较慢,这个时候可以考虑拆分,不要把所有的内容都打到一个包里面去。
  • 1.路由懒加载:
    我们平常使用router可能如下:
import Vue from 'vue'
import Router from 'vue-router'
import index from '@/components/index'
Vue.use(Router);
export default new Router({
    routes: [
        {
            path: '/index',
            name: 'index',
            component: index,
            meta: {
                title: 'index'
            }
        }
    ]
})

先用import引入,然后在component里面配,这种其实是同步模式,也就是说你这样写,index.vue组件里的代码会被打入总包里面。
还有一种和上面类似的同步写法,使用require去写的:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router);
export default new Router({
    routes: [
        {
            path: '/index',
            name: 'index',
            component: require('@/components/index').default,
            meta: {
                title: 'index'
            }
        }
    ]
})

如果要从总包里分出去,就要用到异步加载组件,改造起来也很简单:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router);
export default new Router({
    routes: [
        {
            path: '/index',
            name: 'index',
            component: ()=>import('@/components/index'),
            meta: {
                title: 'index'
            }
        }
    ]
})

改造之后,我们打包的时候就会发现多出来一些js:

Vue中的懒加载和按需加载_Vue


然后请求异步路由的时候,也会发现额外请求了js:

Vue中的懒加载和按需加载_Vue_02


这表示异步路由的内容被单独打包出来了,只在跳转在当前路由的时候加载。

还有一种异步请求的写法:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router);
export default new Router({
    routes: [
        {
            path: '/index',
            name: 'index',
            component: (resolve)=>require(['@/components/index'],resolve),
            meta: {
            title: 'index'
            }
        }
    ]
})

注意()=>import (’./index.vue’)和(resolve)=>require([’./index.vue’],resolve)这两种写法,两者实现异步的机制不一样,内部处理逻辑也不同。

//import()返回promise,利用promise的then执行异步
const fn=()=>import('./index.vue');
fn.then(function(item){
    console.log(item)
});
//返回不是promise,利用普通的回调执行异步
const fn=(resolve)=>require (['./index.vue'],resolve);
fn(function(item){
    console.log(item);
});
  • 2.组件懒加载:
    除了路由可以实现懒加载,组件的引用其实也可以分出去,我们先来看看平常的组件引用:
components:{
    index:require('./index.vue').default,
},

可以改造成异步请求,让它的打包代码从主包中分割出去:

components:{
    index:()=>import ('./index.vue'),//方式1
    index:(resolve)=>require (['./index.vue'],resolve),//方式2
},

不过注意异步加载组件,组件就不是立马出现,而是要等一会才能出现,会出现一个短暂空白,这种根据情况具体使用。


标签:index,vue,Vue,import,Router,加载
From: https://blog.51cto.com/u_16120408/6312756

相关文章

  • Vue watch的immediate和deep
    1.immediateimmediate表示立即执行的意思,这样就是说不用等到value变化才会执行,默认的时候就会立刻执行一次。假设我们页面上有一个搜索框,每次输入内容的时候去请求一个接口,同时一进页面的时候需要调一下这个接口,我们可能一般这样写:<!--作者:zhangfan页面名称:watch的immediate和de......
  • 使用Vue脚手架工具快速搭建vue项目
    全局安装webpack使用npm(需要安装node环境)全局安装webpack,打开命令行工具输入:npminstallwebpack-g或者(npminstall-gwebpack),安装完成之后输入webpack-v,如下图,如果出现相应的版本号,则说明安装成功。全局安装vue-cli,在cmd中输入命令:(cnpminstall-g@vue/cli)用vue-cli来构建......
  • Vue生命周期钩子函数
    每个Vue实例创建时,都会经历一系列的初始化过程,同时也会调用相应的生命周期钩子,我们利用这些钩子,可以在合适的时机执行我们的业务逻辑。vue生命周期共分为四个阶段,八个基本钩子函数<script>exportdefault{data(){return{filter:"all",};},beforeCre......
  • less在vue项目中的全局变量设置
    1,使用全局变量的目的:sass或者less都提供变量设置,在需求切换主题的项目中使用less或者sass变量,只要修改变量值,编译后所有用到该变量的样式都会被修改为你想要的效果2,安装sass-resources-loadernpminstallsass-resources-loader--save-dev3,找到build文件夹下面的utils.jsreturn{......
  • Vue.js学习记录之在元素与template中使用v-if指令实例(转贴)
    语法比较简单,直接上代码:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <title></title> <scriptsrc="https://cdn.bootcss.com/vue/2.2.2/vue.......
  • Vue路由router
    1、总体结构2、路由说明 ......
  • vue component:is 组件切换
    <template><Child1/><Child2/><component:is="currentComp"></component><el-button@click="compChange">切换组件</el-button></template><scriptsetup>import{shallo......
  • 【小小demo】Springboot + Vue 增删改查
    vue-table-ui该工程提供的是一个简单的Vue+Element-UI的表格,增删改查操作。工程代码在最下面。环境jdk1.8ideamavenspringboot2.1.1.RELEASE示例首页查询新增修改删除官方文档Element-Ui:https://element.eleme.cn/#/zh-CN/component/installationV......
  • uniapp 解决app端视频滚动错误、首次加载黑屏的问题(包含后续的视频播放、下载)
    我的理解:出现app端视频滚动错误的原因是因为<video/> 组件在非H5端是原生组件,层级高于普通前端组件。首次加载黑屏的问题,我暂时还不知道原因我的解决方案:获取视频第一帧转成图片展示1、后端处理刚开始在网上搜索解决办法都是在将video组件更换为image组件,地址仍写video的地址,......
  • 在 Vue 中使用 iframe 嵌套页面
    1.在Vue中引入iframe在Vue中使用iframe技术需要在组件中引入iframe标签,代码如下:<template><div><iframesrc="https://www.baidu.com"></iframe></div></template>2.设置iframe的样式在Vue中使用iframe技术需要设置iframe的样式,包括宽度、......