前言
惯例 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.tsexport 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.jsconfigureWebpack: { 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