Vue项目使用CDN优化首屏加载问题


Posted in Javascript onApril 01, 2018

前言

作为一个网站应用,加载速度是非常重要的。加载速度,一个是程序的合理安排,如以组件按需加载,一个是js、css等资源的异步加载。

在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多,那么vendor.js文件体积将会相当的大,影响首开的体验。

解决方法是,将引用的外部js、css文件剥离开来,不编译到vendor.js中,而是用资源的形式引用,这样浏览器可以使用多个线程异步将vendor.js、外部的js等加载下来,达到加速首开的目的。

外部的库文件,可以使用CDN资源,或者别的服务器资源等。

下面,以引入vue、vuex、vue-router为例,说明处理流程。

一、资源引入

在index.html中,添加CDN资源,例如bootstrap:

<body>
  <div id="app"></div>

  <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
  <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
  <script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script>
 </body>

二、添加配置

在bulid/webpack.base.conf.js文件中,增加externals,将引用的外部模块导入,如下:

module.exports = {
 entry: {
  app: './src/main.js'
 },
 externals:{
  'vue': 'Vue',
  'vue-router': 'VueRouter',
  'vuex':'Vuex'
 }

注意一点:

格式为 'aaa' : 'bbb', 其中,aaa表示要引入的资源的名字,bbb表示该模块提供给外部引用的名字,由对应的库自定。例如,vue为Vue,vue-router为VueRouter.

三、去掉原有的引用

去掉import,如:

// import Vue from 'vue'
// import Router from 'vue-router'

去掉Vue.use(XXX),如:

// Vue.use(Router)

测试

重新npm run build,会看到 vendor.js体积有所下降了。通过开发者模式的Network工具,可以看到vue.js、vuex.js、vendor.js等文件会分别由一个线程进行加载。且因为使用了CDN,加载速度比自已的服务器更快。

总结

Javascript 相关文章推荐
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
jQuery学习笔记之toArray()
Jun 09 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
Jul 02 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
Javascript 读取操作Sql中的Xml字段
Oct 09 Javascript
嵌入式iframe子页面与父页面js通信的方法
Jan 20 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 Javascript
js实现加载更多功能实例
Oct 27 Javascript
Vue.Draggable实现拖拽效果
Jul 29 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
Mar 06 Javascript
js 实现Material UI点击涟漪效果示例
Sep 23 Javascript
对Angular中单向数据流的深入理解
Mar 31 #Javascript
jQuery中复合选择器简单用法示例
Mar 31 #jQuery
jQuery中内容过滤器简单用法示例
Mar 31 #jQuery
jQuery中可见性过滤器简单用法示例
Mar 31 #jQuery
Postman模拟发送带token的请求方法
Mar 31 #Javascript
浅谈Postman解决token传参的问题
Mar 31 #Javascript
postman+json+springmvc测试批量添加实例
Mar 31 #Javascript
You might like
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
Windows和Linux动态库应用异同
2016/07/28 面试题
文秘自荐信
2013/10/20 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
组工干部演讲稿
2014/09/02 职场文书
先进工作者申报材料
2014/12/23 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
java版 联机五子棋游戏
2022/05/04 Java/Android