1. webpack打包时:
生产环境下尽可能减少依赖包,按需引用 (webpack-bundle-analyzer)
2. 组件分块按需加载
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
export default new Router({
mode: 'history',
linkActiveClass: 'router-link-class',
routes: [
{
path: '/',
component: resolve => require(['../components/组件'], resolve),
}
] })
3. 使用预渲染
// webpack.prod.config.js
cnpm i prerender-spa-plugin --save-dev
cnpm i vue-meta-info --save-dev
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
plugins: [
new PrerenderSPAPlugin({
// 生成静态文件的目录,路径只能是一级
staticDir: path.join(__dirname, '../dist'),
// 对应需要预渲染的路由文件
routes: ['/', '/detail'],
// 预编译
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false,
// 将在main.js的 document.dispatchEvent(new Event('render-event'))中触发
renderAfterDocumentEvent: 'render-event'
})
})
]
// main.js
import Vue from 'vue';
// 网页标签支持
import VueMetaInfo from 'vue-meta-info';
Vue.use(VueMetaInfo);
new Vue({
el: '#app',
router,
store,
render: h => h(App),
mounted() {
document.dispatchEvent(new Event('render-event'))
}
})
# new Router({
# mode: 'history' // 必须使用‘history’模式
# })
// 页面中处理 ***.vue
export default {
metaInfo: {
title: '页面标题',
meta: [
{
name: 'keywords',
content: '关键字'
},
{
name: 'description',
content: '描述'
}
]
}
}
4.使用gzip压缩减小传输文件大小
// 以 Nginx 服务器为例
http {
............
# 启用gzip
gzip on;
# 启用gzip压缩的最小文件
gzip_min_length 1k;
#设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
gzip_buffers 4 16k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
.....................
}
5. 服务端渲染