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开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
用vue设计一个日历表
Dec 03 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
vue中配置scss全局变量的步骤
Dec 28 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
如何优化vue打包文件过大
Apr 13 Vue.js
vue elementUI批量上传文件
Apr 26 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
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
安全检查与奖惩制度
2014/01/23 职场文书
主要负责人任命书
2014/06/06 职场文书
七夕活动策划方案
2014/08/16 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
大学生村官入党自传
2015/06/26 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏