SSR代表服务器端渲染(Server Side Rendering),这里主要以React为目标讨论这个话题,但是对其他框架也有参考意义。
关于SSR你需要关注:
1. 首次重要的绘制。单靠SSR并不能保证良好的效果,还需要关键的CSS和靠近客户端。
2. 支持SEO,支持Twitter和Facebook等其他机器人
3. 优雅的退化。这样能确保你的服务在没有JS的情况下也是可用
有什么难的?
SSR就像一个新的维度,无论你使用什么,你都需要为SSR重新配置。
1. 用componentDidMount来获取数据吗?你就需要使用类似getInitialProps(来自next.js或after.js)或状态管理库(如Redux),这些要放在服务器上运行。
2. 用Router吗?你需要在服务器上配置它
3. 用i18n吗?你需要在服务器上配置它
4. 使用HMR吗?你需要为浏览器和服务器重新加载代码
5. 用react-helmet吗?需要在服务器上配置它
6. 是否使用react-loadable?需要配置服务器以传递使用的模块,这样客户端可以预加载它们
7. 使用Redux吗?您需要序列化存储并将其传递给客户端
8. 使用CSS-in-JS吗?需要在服务器上配置它,生成关键CSS并在HTML响应中内联它
不要以为这些都是可以解决的,好像Next.js和Razzle已经解决了大部分问题,我想告诉你的是SSR如何将所有事情加倍(另一个维度),并且大部分时间都需要样板来处理所有事情。
第一次重要的绘制
如果正在进行SSR,这并不意味着你能获得开箱即用的第一次重要的绘制。
1. 你的设置是否有为第一个字节这是好时间?如果你的服务器运行缓慢或过载 - 你会遇到问题,确保使用最新节点,缩小服务器代码,使用流式渲染,优化子查询(数据库或网络)(如果有)。
2。 你提供关键的CSS吗?否则,浏览器无法开始呈现页面。
3. 你使用网络字体吗?如果是的话,你会优化吗?
4. 服务器是否靠近客户端?如果您的服务器在欧洲,但客户端在日本,SSR将无法帮助您。使用CDN服务,但是如果由于法律限制而无法将服务器移近客户端怎么办?
5. 你确定没有不必要的重定向吗?重新定向减慢速度。
6. SSR不是第一次重要绘制渲染的银弹。如果你的后端很慢或很远,你需要检查"shell"包括CDN是否能更好地工作。你可以使用react-snap之类的东西来预呈现静态页面并为其他页面生成“shell”。
7. 如果您的网站更加静态,您可以使用预渲染而不是SSR。使用react-static或gatsby或react-snap。
SEO
这里有3个选项:
1. SSR
2. 预渲染,如react-snap, react-static, gatsby 等。
3. 根据需求进行预渲染,如rendertron,puppetron,pupperender等。
如果可以,请选择预渲染。如果您唯一关注的是SEO,那么随时都可以轻松使用预渲染。
优雅的退化
这个很棘手,这真的取决于你想要降到多少级?
1. 你想支持链接吗?
2. 是否想要支持下拉菜单,就像在https://www.seek.com.au/中一样?你需要使用CSS和复选框的一些技巧
3. 你想要支持表格吗?除了现有的JSON API之外,您还需要端点来处理这些表单
4. 没有JS的一些功能非常难,比如组合框或地图
结论
SSR很好,试一试。请确保您的用户真正从中受益。
如果您不能使用SSR而是尝试预渲染器,有时它是最简单的选择。