vue2 懒加载优化

懒加载:也叫延迟加载,即在需要的时候进行加载,随用随载

在单页应用中,如果没有应用懒加载,运用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

    }

2、配合webpack支持的异步加载方法

     resolve => require([URL], resolve), 支持性好

     () => system.import(URL) , webpack2官网上已经声明将逐渐废除, 不推荐使用
    

     () => import(URL), webpack2官网推荐使用, 属于es7范畴, 需要配合babel的syntax-dynamic-import插件使用, 具体使用方法如下:(使用vue-cli脚手架忽略安装)

    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)还是需要团队交流,建立合理区分各种加载方式的组件文件夹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2 组件懒加载是指在使用 Vue.js 开发项目时,将组件按需加载,而不是一次性加载全部组件。这样可以减少初始加载时间,提升页面的加载速度和性能。 在 Vue2 中,懒加载可以通过使用异步组件和 Webpack 的代码分割功能来实现。具体步骤如下: 1. 创建异步组件:在定义组件时,可以使用 Vue 提供的工厂函数 `Vue.component`,将组件定义为一个函数,该函数返回一个 Promise 对象。Promise 对象在异步操作完成时会进行 resolve,将组件作为参数传递给 resolve 函数。 ```javascript Vue.component('MyComponent', () => import('./MyComponent.vue')); ``` 2. 在需要使用组件的地方使用 `v-once` 指令加载组件:通过在组件所在的标签上添加 `v-once` 指令,当组件首次加载完成后会将组件的内容缓存起来,下一次组件重新加载时,会直接使用缓存中的内容,而不再重新渲染。 ```html <template> <div> <my-component v-once></my-component> </div> </template> ``` 3. 配置 Webpack:在使用 Webpack 打包时,需要配置 `vue-loader` 插件来实现组件的懒加载。在 `vue-loader` 配置中添加 `require.ensure` 函数,该函数可以将组件代码分割成独立的文件,需要时再进行加载。 ```javascript module.exports = { ... module: { rules: [ ... { test: /\.vue$/, loader: 'vue-loader' }, ... ] }, resolve: { extensions: ['.js', '.vue'], alias: { 'vue$': 'vue/dist/vue.esm.js' } }, }; ``` 通过以上步骤,在使用 Vue2 开发项目时,可以使用组件懒加载优化页面加载速度和性能,提升用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值