Vue SPA 首屏优化方案


Posted in Vue.js onFebruary 26, 2021

前言

常规 vue 项目打包后访问,返回一个只包含 div 的 html,其他内容块都是通过 js 动态生成的。

Vue SPA 首屏优化方案

存在两个比较大的问题:

  • 不利于 seo
  • 首屏加载页慢,用户体验不好

本文是自己根据项目经验总结的方案,如有不足,欢迎指出~

优化

SSR

SSR(Server-Side Rendering) 即服务端渲染,把 vue 组件在服务器端渲染为组装好的 HTML 字符串,然后将它们直接发送到浏览器,最后需要将这些静态标记混合在客户端上完全可交互的应用程序。
使用 ssr 重新部署构建项目后:

Vue SPA 首屏优化方案

可以看到返回的内容就已经包含了首屏内容的 html 代码块,perfect!~.~

极速传送门: 基于vue-cli4.0+Typescript+SSR的小Demo

按需引入

使用 es6 module 进行按需引入

1. 路由文件中按需引入组件

# router.index.ts
export function createRouter() {
 return new Router({
 mode: 'history',
 routes: [
  {
  path: '/',
  name: 'Home',
  component: () => import(/* webpackChunkName: "Home" */ './views/Home.vue'),
  },
  {
  path: '/about',
  name: 'About',
  component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
  },
 ],
 });
}

2. 静态库按需引入模块,而不是全部

如 element-ui 库中,我只想用 button 组件 :

import {
 button
} from 'element-ui';

请求优化

1. css、js 放置顺序

css 文件放 header 中,js 文件放 body前,不过 vue 已经帮我们处理好了~

2. 使用字体图标,icon 资源使用雪碧图

我们知道 http 建立一次连接需要 3 次握手,太多的请求会影响加载速度

对不必要的静态资源我们应该尽量减少,比如页面中的 icon 图标,如下腾讯官网的一个图片:

Vue SPA 首屏优化方案

直接引入一张完成的图片,根据 background-position 来设置图片的位置

使用CDN

静态资源都上传到 CDN,提高访问速度

不使用 CDN:

Vue SPA 首屏优化方案

使用 CDN:

可以看到使用 CDN后,会对静态文件进行 GZIP 压缩, 下载度度极大的提高

Vue SPA 首屏优化方案

入口 chunk 优化

拆分入口 chunk 文件,分离出一些静态的库,既可以加速打包,也可以优化加载。

如下,分离了一些静态库:vuejs、axios、vuex等,可以看到浏览器将开启多个下载线程进行下载。若没有分离这些静态库,入口 chunk 将十分巨大,加载速度可想而知~.~

Vue SPA 首屏优化方案

分离一个 element-ui 库,dev 环境我们不用管,prod 环境下我们才分离,只需要在 vue 打包配置中移除该库即可:

# vue.config.js
configureWebpack: {
 externals:
 process.env.NODE_ENV === 'production'
  ? {
  'element-ui': 'element-ui',
  }
  : undefined,
},

# index.html 手动引入静态资源
<script src="/js/element-ui/element-ui.2.11.1.js"></script>

以上就是Vue SPA 首屏优化方案的详细内容,更多关于Vue SPA 首屏优化的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue+iview实现文件上传
Nov 17 Vue.js
vue 插槽简介及使用示例
Nov 19 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 #Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 #Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 #Vue.js
Vue基本指令实例图文讲解
Feb 25 #Vue.js
vue常用高阶函数及综合实例
Feb 25 #Vue.js
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 #Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 #Vue.js
You might like
实现树状结构的两种方法
2006/10/09 PHP
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
深入浅出php socket编程
2015/05/13 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
python 全文检索引擎详解
2017/04/25 Python
windows下python连接oracle数据库
2017/06/07 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
军训生自我鉴定范文
2013/12/27 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
检讨书范文500字
2015/01/28 职场文书
北京英语导游词
2015/02/12 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
孟佩杰观后感
2015/06/17 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
2015大学迎新标语
2015/07/16 职场文书
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript