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 01 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
vue实现简易音乐播放器
Aug 14 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连mysql和oracle数据库性能比较
2006/10/09 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
php的ddos攻击解决方法
2015/01/08 PHP
PHP使用递归生成文章树
2015/04/21 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
VSCode搭建React Native环境
2020/05/07 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
Python中的Matplotlib模块入门教程
2015/04/15 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
python软件都是免费的吗
2020/06/18 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
成绩单家长评语大全
2014/04/16 职场文书
自主招生英文自荐信
2015/03/25 职场文书
2015年社区工作总结
2015/04/08 职场文书
Redis性能监控的实现
2021/07/09 Redis
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js