乐趣区

关于javascript:Vue-SPA-首屏优化实战

前言

惯例 vue 我的项目打包后拜访,返回一个只蕴含 div 的 html,其余内容块都是通过 js 动静生成的。

存在两个比拟大的问题:

  • 不利于 seo
  • 首屏加载页慢,用户体验不好

本文是本人依据我的项目经验总结的计划,如有有余,欢送指出~

优化

SSR

SSR(Server-Side Rendering) 即服务端渲染,把 vue 组件在服务器端渲染为组装好的 HTML 字符串,而后将它们间接发送到浏览器,最初须要将这些动态标记混合在客户端上齐全可交互的应用程序。

应用 ssr 重新部署构建我的项目后:

能够看到返回的内容就曾经蕴含了首屏内容的 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 图标,如下腾讯官网的一个图片:

间接引入一张实现的图片,依据 background-position 来设置图片的地位

举荐一个制作雪碧图的网站:CSS Sprites Generator

应用 CDN

动态资源都上传到 CDN,进步访问速度

不应用 CDN:

应用 CDN:

能够看到应用 CDN 后,会对动态文件进行 GZIP 压缩,下载度度极大的进步

入口 chunk 优化

拆分入口 chunk 文件,拆散出一些动态的库,既能够减速打包,也能够优化加载。

如下,拆散了一些动态库:vuejs、axios、vuex 等,能够看到浏览器将开启多个下载线程进行下载。若没有拆散这些动态库,入口 chunk 将非常微小,加载速度可想而知~.~

拆散一个 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>

我的博客


END

退出移动版