背景介绍: 随着项目愈来愈大,性能问题已经成为了困扰业务发展的重要因素。 功能不停地累加后,核心页面已经不堪重负,访问速度越来越慢。 业务发展、用户体验都很是迫切的须要释放页面的负载,提升页面加载速度。
一直在寻找一个优雅的实现前端模块化、并能按权重的优先级顺序异步加载的实现方案。忽然了解到vue的异步组件,因而便专门研究实践了一下。css
首先看一下官网对异步组件的介绍:
嗯,比较简单的介绍,不过这个特性确实是我眼前一亮,接下来就上代码,看看效果如何:
webpack简单设置以及工程结构
简单的webpack+vue配置前端
var webpack = require('webpack'); module.exports = { watch: true, //监听变化自动编译 entry: { 'index': './src/index.js', }, output: { path: './dist/', filename: '[name].min.js', publicPath:'./dist/' }, module: { loaders: [ { test: /\.vue$/, //解析vue模板 loader: "vue-loader" }, { test: /\.js$/, //js转换 exclude: /(node_modules)/, loader: "babel-loader", query: { presets: ['es2015'] } }, { test: /\.css$/, //css转换 loader: 'vue-style!css' } ] }, vue: { loaders: { css: 'vue-style!css', } } };
入口js文件:vue
import Vue from 'vue'; import Frame from './index.vue'; let app = new Vue({ el: '#app', render: h => h(Frame), });
框架文件:node
<template> <div> 异步组件测试 点击按钮后 第一个延迟300毫秒,从服务器加载 第二个不延迟从服务器加载 <template v-if="show"> <later></later> <later2></later2> </template> <button @click="toggle">加载</button> </div> </template> <script> import Vue from 'vue'; const later = Vue.component('later', function (resolve) { setTimeout(function () { require(['./later.vue'], resolve) }, 3000); }); const later2 = Vue.component('later2', function (resolve) { require(['./later2.vue'], resolve) }); export default{ data: function () { return { show: false }; }, components: { later, later2, }, created: function () { }, mounted: function () { }, computed: {}, methods: { toggle:function () { this.show = !this.show; } }, } </script> <style> </style>
服务器异步组件1:webpack
<template> <div> load me later 11111 </div> </template> <script> export default{ data: function () { return {}; }, components: {}, created: function () { }, mounted: function () { }, computed: {}, methods: {}, } </script> <style> </style>
服务器异步组件2:web
<template> <div> load me later 22222 </div> </template> <script> export default{ data: function () { return {}; }, components: {}, created: function () { }, mounted: function () { }, computed: {}, methods: {}, } </script> <style> </style>
好,咱们跑起来看看效果!!!服务器
一、刷新页面,加载框架
二、点击加载,此时异步组件2,马上从服务器加载下来,渲染出来
三、点击加载后,3000毫秒,此时异步组件1被触发从服务器加载,渲染babel
利用此特性,咱们便能作不少针对前端的优化。
好比:将页面核心功能(音、视频播放、文章、商品等等)打包成一个核心模块,经过框架优先加载。
其余的一些周边功能打包后,经过服务器异步加载,从而解决业务需求愈来愈多致使的系统难维护、访问慢问题。app
此时,聪明的小伙伴们确定在想了,既然是异步加载,就会存在加载过程(正在加载中)、以及加载失败等异常状况。
这时候怎么办呢,一个个状态去维护吗?No!框架
咱们看看官网另外一个特性:
相信通过上面的使用教程之后,高级异步组件你们一眼就能看懂并会使用,是否是很完美!!!
再稍做研究,就准备将它用到实际生产啦。