背景:想给项目做一些优化,想尝试预渲染和SSR
这里说一下SSR
使用的技术栈是VUE
预渲染使用的是 prerender-spa-plugin 这个包
先说一下效果吧
这个感觉就是类似高级的骨架屏,不过他是一个真正的页面,只是没有数据,或者数据驱动渲染的一切。
使用这个插件 配置好几个预渲染的页面会 在build时提前讲这些页面渲染成浏览器可以直接打开的html文件。这样你在浏览器输入地址后,会直接得到这样一个页面,省去了渲染出页面的时间,因为在打包时这个页面就渲染完了,也就是我们提前预渲染了。
不好用的地方:
说一些不好用的地方,比如我们我们做的是类似管理后台的页面,无论你进入什么也都需要先登陆,那么这个效果就会打折扣,毕竟无论预渲染了什么页面 都会被重定向到登录页。
使用
1、安装 如果不行可能需要翻墙或者找一些镜像包试试
npm i prerender-spa-plugin -S
2、配置 vue.config.js
module.exports = {
...,
plugins: [
staticDir: path.join(__dirname, 'dist'),
routes:['/home'],
renderer: new Renderer({
inject: {
foo: 'bar'
},
renderAfterDocumentEvent: 'render-event'
})
],
// 另一种写法
// config.pludaasdfgins.push(
// new PrerenderSPAPlugin({
// staticDir: path.join(__dirname, 'dist'),
// indexPath: path.join(__dirname, 'dist', 'index.html'),
// routes:['/home'],
// renderer: new Renderer({
// inject: {
// foo: 'bar'
// },
// headless: true,
// renderAfterDocumentEvent: 'render-event'
// })
// })
// )
}
prerender-spa-plugin 还有很多参数 具体可以去官网看
3、打包
npm run build
打包完成后在dist 文件(打包后的文件)里面有一个home的文件夹,里面有一个index.html 文件,当你 访问http:// …/home 页面时 就会直接调用这个页面。也可以直接用浏览器打开这个页面
坑点
1、打开生成的home/index.html 文件 会发现 有可能你的css js 引用的路径不对,导致你生成页面没有样式,此时需要处理路径使其调用到正确的css js。
- 方法1、可以手动打包完,改完路径,讲包扔给运维扔到服务器
- 方法2、使用
npm i replace-in-file
这个包写方法 替换 路径 这种就是纯自动化部署了
2、自动化部署时 - 如果使用了上面的方法1那没什么问题 毕竟 包是在我们这处理好的。
- 如果是方法2,自动话打包,那么jenkins在build时会有很多依赖,比如 prerender-spa-plugin 就使用了 chromium 安装时可能会失败这个需要注意,需要跟运维一起处理这些问题
小白 学习文档,有问题欢迎指正,互相学习。