vue-router 的三种加载方式速度对比

4,661 阅读3分钟

ensure 方式

// const Index = r => require.ensure([], () => r(require('@/views/deposit/deposit_index')), 'Index')
// const Product = r => require.ensure([], () => r(require('@/views/deposit/deposit_product')), 'Product')
// const ProductSave = r => require.ensure([], () => r(require('@/views/deposit/deposit_product_save')), 'ProductSave')
// const My = r => require.ensure([], () => r(require('@/views/deposit/deposit_my')), 'My')
// const MyDetail = r => require.ensure([], () => r(require('@/views/deposit/deposit_my_detail')), 'MyDetail')
// const MyTransDetail = r => require.ensure([], () => r(require('@/views/deposit/deposit_my_transdetail')), 'MyTransDetail')

全部采用ensure的方式运行,首屏时间则会慢很多,每次打开的时间记录

首屏时间: 324ms
首屏时间: 552ms
首屏时间: 457ms
首屏时间: 275ms
首屏时间: 250ms
首屏时间: 330ms
首屏时间: 395ms
首屏时间: 314ms
首屏时间: 276ms
首屏时间: 314ms

平均时间:348.7ms

下面测试跳转时的时间如下:

首页跳转测试: 212ms
首页跳转测试: 161ms
首页跳转测试: 161ms
首页跳转测试: 54.8ms
首页跳转测试: 156ms
首页跳转测试: 58.3ms
首页跳转测试: 52.3ms
首页跳转测试: 84.2ms
首页跳转测试: 150ms
首页跳转测试: 168ms

平均时间:125.76ms

amd 方式

const Index = resolve => require(['@/views/deposit/deposit_index'], resolve)
const Product = resolve => require(['@/views/deposit/deposit_product'], resolve)
const ProductSave = resolve => require(['@/views/deposit/deposit_product_save'], resolve)
const My = resolve => require(['@/views/deposit/deposit_my'], resolve)
const MyDetail = resolve => require(['@/views/deposit/deposit_my_detail'], resolve)
const MyTransDetail = resolve => require(['@/views/deposit/deposit_my_transdetail'], resolve)

如果是webpack2 可以使用

// const Index = () => System.import('@/views/deposit/deposit_index')

首屏时间如下:

首屏时间: 480ms
首屏时间: 425ms
首屏时间: 310ms
首屏时间: 360ms
首屏时间: 318ms
首屏时间: 328ms
首屏时间: 502ms
首屏时间: 324ms
首屏时间: 313ms
首屏时间: 505ms

平均时间:386.5ms

下面测试按照amd方式跳转时的时间如下:

首页跳转测试: 50.6ms
首页跳转测试: 48.2ms
首页跳转测试: 51.2ms
首页跳转测试: 54.0ms
首页跳转测试: 48.5ms
首页跳转测试: 49.1ms
首页跳转测试: 48.4ms
首页跳转测试: 41.9ms
首页跳转测试: 46.2ms
首页跳转测试: 47.4ms

平均时间:48.55ms

常规加载方式

import Index from '@/views/deposit/deposit_index'
import Product from '@/views/deposit/deposit_product'
import ProductSave from '@/views/deposit/deposit_product_save'
import My from '@/views/deposit/deposit_my'
import MyDetail from '@/views/deposit/deposit_my_detail'
import MyTransDetail from '@/views/deposit/deposit_my_transdetail'

全部采用这种方式,速度会要快很多,首屏时间如下

首屏时间: 111ms
首屏时间: 119ms
首屏时间: 76.6ms
首屏时间: 76.5ms
首屏时间: 72.8ms
首屏时间: 108ms
首屏时间: 122ms
首屏时间: 84.3ms
首屏时间: 123ms
首屏时间: 113ms

平均时间:100.62ms

采用此方式做跳转测试,如下

首页跳转测试: 26.9ms
首页跳转测试: 25.0ms
首页跳转测试: 31.2ms
首页跳转测试: 31.1ms
首页跳转测试: 23.7ms
首页跳转测试: 26.6ms
首页跳转测试: 29.4ms
首页跳转测试: 27.6ms
首页跳转测试: 30.2ms
首页跳转测试: 24.2ms

平均时间为:27.59ms

总结:

加载方式 首屏平均时间 跳转页面平均时间
常规加载 100.62ms 27.59ms
amd加载 386.5ms 48.55ms
ensure加载 348.7ms 125.76ms

amd 与 ensure 区别

  • require-amd

说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调函数

语法: require(dependencies: String[], [callback: function(…)])
参数
dependencies: 模块依赖数组
callback: 回调函数

  • require-ensure

说明: require.ensure在需要的时候才下载依赖的模块,当参数指定的模块都下载下来了(下载下来的模块还没执行),便执行参数指定的回调函数。require.ensure会创建一个chunk,且可以指定该chunk的名称,如果这个chunk名已经存在了,则将本次依赖的模块合并到已经存在的chunk中,最后这个chunk在webpack构建的时候会单独生成一个文件。

语法: require.ensure(dependencies: String[], callback: function([require]), [chunkName: String])
dependencies: 依赖的模块数组
callback: 回调函数,该函数调用时会传一个require参数
chunkName: 模块名,用于构建时生成文件时命名使用

注意点:requi.ensure的模块只会被下载下来,不会被执行,只有在回调函数使用require(模块名)后,这个模块才会被执行。


本文对你有帮助?欢迎扫码加入前端学习小组微信群: