Home  >  Article  >  Web Front-end  >  Optimize vue-router lazy loading

Optimize vue-router lazy loading

php中世界最好的语言
php中世界最好的语言Original
2018-06-11 15:16:121309browse

This time I will bring you what are the precautions for optimizing vue-router lazy loading. The following is a practical case, let's take a look.

Everyone who has used vue-router knows that it can implement lazy loading of module js, that is, only load the js script file of the corresponding module when needed to speed up the display of the homepage. For example, only when a user clicks a "User Information" button or menu for the first time, the js component of the "User Information" module is downloaded.

The implementation of lazy loading relies on the function of the AMD mode require function under webpack. Webpack will generate an independent js file from the asynchronous require file. When calling, it will download the js asynchronously and execute it after completion. The key code implemented in the development project is:

const basicInfo = {
  path: '/user',
  component: resolve => require(['./basicInfo.vue'], resolve) 
}
//然后将这个basicInfo加入路由表中

But there is a problem here: from the time the user clicks the "User Information" menu to the completion of the js file download and execution, there is a time delay in downloading the js from the network. During this period, the user interface does not respond in any way, making users feel that clicking on it is ineffective, and they often click again. This is especially true when the js file is large and the network speed is slow. Therefore, it is necessary to add a Loading loading prompt in this process.

We analyze this line of code:

resolve => require(['./basicInfo.vue'], resolve)

It is a function that executes the require process, and then calls the resolve callback function after completion. We only need to encapsulate it, display Loading before require is executed, and then hide Loading when the callback is completed and executed, and this requirement will be achieved. As follows:

const basicInfo = {
  path: '/user',
  component: resolve => {
    [显示Loading]
    require(['./basicInfo.vue'], component => {
      [隐藏Loading]
      resolve(component)
    })
  }
};

The code for displaying and hiding Loading can be processed according to your own UI framework. For example, element-ui:

import { Loading } from 'element-ui';
var unique;
export default {
  show() {
    let opt = {body: true, text: 'Loading...'};
    if(!unique) unique = Loading.service(opt);
  },
  resolve(resolve) {
    return function (component) {
      if (unique) {
        unique.close();
        unique = null;
      }
      resolve(component)
    }
  }
}
const basicInfo = {
  path: '/user',
  component: resolve => {
    spinRoute.show();
    require(['./basicInfo.vue'], spinRoute.resolve(resolve))
  }
};

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the PHP Chinese website!

Recommended reading:

How to publish vue todo-list application

Use mint-ui to make three things on the mobile phone Cascade linkage

The above is the detailed content of Optimize vue-router lazy loading. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn