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 相关文章推荐
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
原生js和jQuery随意改变div属性style的名称和值
Oct 22 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
javascript关于继承的用法汇总
Dec 20 Javascript
js实现照片墙功能实例
Feb 05 Javascript
javascript给span标签赋值的方法
Nov 26 Javascript
jQuery获取多种input值的简单实现方法
Jun 20 Javascript
vuex学习之Actions的用法详解
Aug 29 Javascript
微信小程序实现收货地址左滑删除
Nov 18 Javascript
在Vuex中Mutations修改状态操作
Jul 24 Javascript
JavaScript 生成唯一ID的几种方式
Feb 19 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
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
VUE写一个简单的表格实例
2019/08/06 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
pycharm设置注释颜色的方法
2018/05/23 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python操作yaml说明
2020/04/08 Python
python右对齐的实例方法
2020/07/05 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
买房委托公证书
2014/04/08 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书