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下载后台传过来的乱码流的问题
Dec 05 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python 文件处理注意事项总结
2017/04/10 Python
python实现Adapter模式实例代码
2018/02/09 Python
python 日期操作类代码
2018/05/05 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
优秀员工评语
2014/02/10 职场文书
养牛场项目建议书
2014/05/13 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏