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+element-ui的项目中封装dialog组件
Dec 11 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue动态设置路由权限的主要思路
Jan 13 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
vue postcss-px2rem 自适应布局
May 15 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
Python魔法方法详解
2019/02/13 Python
python实时监控logstash日志代码
2020/04/27 Python
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
《赵州桥》教学反思
2014/02/17 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python