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获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
Extjs grid添加一个图片状态或者按钮的方法
Apr 03 Javascript
JS实现闪动的title消息提醒效果
Jun 20 Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 Javascript
元素绑定click点击事件方法
Jun 08 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
Nov 19 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
Mar 17 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
vue读取本地的excel文件并显示在网页上方法示例
May 29 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
对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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
python基于socket实现网络广播的方法
2015/04/29 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
快速查询Python文档方法分享
2017/12/27 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
欢迎新生标语
2014/10/06 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
详解Spring事件发布与监听机制
2021/06/30 Java/Android
Go语言应该什么情况使用指针
2021/07/25 Golang
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android