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初学者应注意的七个细节详细介绍
Dec 27 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 Javascript
值得分享的Bootstrap Table使用教程
Nov 23 Javascript
JavaScript之class继承_动力节点Java学院整理
Jul 03 Javascript
node.js实现的装饰者模式示例
Sep 06 Javascript
Vue代码分割懒加载的实现方法
Nov 23 Javascript
JS正则表达式常见用法实例详解
Jun 19 Javascript
使用Ajax实现无刷新上传文件
Apr 12 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 HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
js 单引号 传递方法
2009/06/22 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
jQuery获取select选中的option的value值实现方法
2016/08/29 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
Node.js Buffer用法解读
2018/05/18 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python模块WSGI使用详解
2018/02/02 Python
在python中求分布函数相关的包实例
2020/04/15 Python
jupyter 导入csv文件方式
2020/04/21 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
报社实习生自荐信
2014/01/24 职场文书
军训自我鉴定200字
2014/02/13 职场文书
同学会邀请函模板
2015/01/30 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
python区块链实现简版工作量证明
2022/05/25 Python