对于服务器端渲染,我发现了两种方法:

  • next.js
  • chrome headless 预渲染 (ex react-snap)

  • NextJs 在 GitHub 上有很多明星和一个很棒的社区,但另一种方法(chrome headless 预渲染)似乎更干净,需要几乎零配置才能工作。

    有没有人有与他们一起工作的经验?
    每种方法的主要优缺点是什么?

    最佳答案

    (前段时间一直在为这个困境苦苦挣扎,想和大家分享一下我的一些个人观点)

    SPA 应用程序中 SSR 的一些优点

  • SEO/SMO - 最需要的因素,像标准网站一样实现 SPA 的可抓取性,
  • 性能 - 更快渲染 SPA 站点,同时预渲染 HTML 节点,
  • 资源 - 就像它总是在服务器渲染的站点中一样,SSR 为您的用户利用现有服务器架构的计算能力。

  • 有用的来源: Server-side vs client-side rendering in React appsNext.js — React Server Side Rendering Done Right

    SEO 的实际值(value)是无与伦比的,在撰写本文时,主要是 Google 可以正确抓取 SPA( insights & analysis ),虽然它可以被认为足以进行有机搜索,但通常对于社交媒体来说是 Not Acceptable ,因为社交媒体根本不会产生链接的摘录,导致您的业​​务的缺点。

    性能案例仅限于一种 - React Apps(以及一般的 SPA)用于在客户端上有效地存储站点。通常第一次运行:安装离线 Web Worker,将大量缓存加载到浏览器中。使这个优点几乎只在用户第一次加载网站的情况下才有效。

    资源的可用性或其优势与应用程序架构严格相关,在某些情况下,缓存可能比涉及服务器的性能更高。

    使用NextJS/Gatsby/SSR应用程序框架

    JS 不断发展的本质正在快速插入这些框架需要与进步竞争的问题。这意味着在一段时间内落后于其技术最佳功能的事实。

    一个关键的例子是在 React-Router v4 更新 之后大肆宣传,它在 Storm 中掀起了样板,但在社区压力很大的情况下踩了像 NextJS Use with React Router 4 #1632 这样的框架,因为开发人员我们被迫使用提供给我们的架构.

    这意味着更少的 CRA(以及一般的 React 标准)和更像 NextJS:
  • 应用程序结构、next/headDocument<layout>
  • @zeit/next-css , @zeit/next-sass , styled-jsx ,
  • static async getInitialProps () 模式,
  • next-redux-wrapper , next-redux-saga ,
  • <Link prefetch> 来自 next/link ,
  • 来自 /pages/ 的 BE 路由,从 /static/ 等提供的文件。

  • 并让“感觉”被修补后可以像成熟的 CRA 一样工作。

    另一个失败点是标准的无 SSR 应用程序不会很容易地移植到像 NextJS/Gatsby 这样的 SSR 解决方案,它们有自己的规则和架构。最好在一开始就强制做出这样的决定。

    headless 预渲染

    使您的应用程序免受 SSR 应用程序内解决方案的限制。 SPA 站点假定使用 API 而不在服务器上呈现,因此许多模式/包还没有从头开始准备好 SSR,并且可能会污染您的标准代码库。

    如果您寻求SEO/SEM,虽然可能没有最佳的优化方案来为您的SSR服务,但它是一个非常简单明了的解决方案。

    自动工具(如您的 react-snap 提供的)可能会遇到一些 Caveats 问题,包括正确捕捉站点正确 HTML 输出的问题(例如,对于 SEO 目的最有值(value)的那个)。

    虽然纯粹用于 SEO 的 SSR 方法没有任何问题,但有一个合理的事实,即在不久的将来,任何爬虫都会取得 SPA 的最佳爬虫能力,因此一段时间后,完整的 SSR 解决方案可能不是一个优势。

    关于javascript - React SSR,NextJS与Chrome headless 预渲染,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51011222/

    10-09 16:54