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-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
vue-router路由懒加载及实现的3种方式
Feb 28 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
vue实现水波涟漪效果的点击反馈指令
May 31 Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
php字符串过滤与替换小结
2015/01/26 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
写的htc的数据表格
2007/01/20 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
详解Vite的新体验
2021/02/22 Javascript
python简单判断序列是否为空的方法
2015/06/30 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
民事调解书范文
2015/05/20 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers