【性能】预渲染技术
Prerender SPA Plugin
一个灵活的静态网站构建框架,让你更好地使用webpack为SPA应用打包
更多请参考官方文档 预渲染技术
什么是预渲染??
服务端渲染在前端界变得越来越主流。在将网页或应用程序发送给客户之前,在服务器就先呈现了我们想展示的内容。这是一个革命性的想法。
然而,对于PHP、ASP、JSP(以及这样的)站点来说,同样的批评对于今天的服务器端呈现是有效的。它很慢,很容易被打破,并且很难正确地实现。问题是,尽管每个人可能会告诉你,你可能不需要SSR。您可以通过使用预先设定来获得几乎所有的优点(没有缺点)。
预渲染的原理是启动一个无头浏览器(如puperteer),加载应用程序的路由,并将结果保存到静态HTML文件中。然后,可使用以前使用的静态文件-文件服务解决方案来服务它。它只适用于HTML5导航和类似的东西。不需要更改代码或添加服务器端渲染工作区。
使用场景
改善少数营销页面,广告页等的SEO,预渲染就能起到很好的效果.
当然,我们也要承认,在某些场景下,预渲染并不是特别适合:
- 大量的网页和跳转 使用预渲染会很慢,虽然这种场景并没那么多,但不代表不会出现
- 动态内容 如果网页中有大量的动态内容,Ajax这类,应确保有占位符组件,直到动态内容加载完后才显示出来,否则页面闪动和重绘的开销会得不偿失
关于 About prerender-spa-plugin
3.x 版本是基于puppeteer的稳定版本。
该插件的目标是提供一个简单、可扩展的预渲染解决方案,可以用于任何网站或用webpack构建的单页面应用。
当然,前提是其他任务是已构建好并可运行的
Examples 示例
特定框架例子 可以在源码中找到
Basic Usage
基础用法 webpack.config.js
1 | const path = require('path') |
Advanced Usage
高级用法 webpack.config.js
1 | const path = require('path') |
可用的渲染器
- @prerenderer/renderer-puppeteer 已经预先准备好了几百页,并希望得到准确的结果 那就是用它吧
- @prerenderer/renderer-jsdom 你需要提前阅读成千上万页的内容,但是质量并不是那么重要,你愿意为更高级的案例解决问题
其他
- JS 在 prerender前不运行
如果您的代码依赖于“body”的存在,那么只需在domcontent重载事件的回调中运行它:(否则会发现在JS运行之前,预编译-spa-plugin将输出页面的内容)
document.addEventListener('DOMContentLoaded', function() {})
如果使用 Vue,将 <div id="root">
mounting 到 body标签上:
1 | const app = new Vue({ /**/ }) |
Inline styles 内联样式
如果您依赖于内联CSS,也就是说,您不会从捆绑包中提取CSS,因此,体验重复的CSS样式标签,可以考虑使用 extract-text-webpack-plugin
将CSS提取到单独的文件中。然后将CSS注入到模板中。使用 html-webpack-plugin
的html文件,或者将其称为外部CSS文件。
无论哪种方式,JS中都不会有任何不必要的样式。
警告
出于显而易见的原因,预安装-spa-插件只适用于使用HTML5历史API的spa。索引。不幸的是,html/hash/路由url将无法工作
vue2+ 确保你的根组件与它所替换的预先设计的元素具有相同的id。否则,您将得到重复的内容