Next.js 架构

Next.js Architecture

我正在寻找一些 Next.js 架构建议

我正在将具有自定义 SSR 设置的非常大的 Express NodeJS 应用程序迁移到 Next.js 设置。

对于当前的 NodeJS 站点,我有:

根据我目前阅读的所有文档,我认为最佳设置是:

  1. 为了保留我现有的路由/中间件(我有很多)的快速设置,这包括 /api/*
  2. 将控制器获取逻辑迁移到 publically 可访问的 express apis /api/*(我已经有了但需要清理)
  3. 对于现有的快速控制器路由,将它们路由到 Next.js 并使用 nextApp.render 到特定的下一页
  4. 在 Next.js 页中使用 getInitialProps 从我在 2.
  5. 中提到的那些 api 中获取数据
  6. 还将 express 控制器中的旧道具转换逻辑添加到 getInitialProps

这样服务器和客户端就可以共享 getInitialProps 中的相同逻辑 - 这将使架构变得干净,并使我能够顺利过渡到使用 Link

我遇到的问题是第 4 步。

这意味着现在在页面请求的 SSR 上,它需要调用 getInitialProps 上的 public api (www.mywebsite.com.au/api/*) 来获取其数据。

对我来说,执行此操作似乎是一种性能开销,因为它需要网络跳转到 public 域 mywebsite.com.au 以获取它本可以在同一请求上本地获取的数据(通过调用 localhost:3000/api/* 例如)

关于如何避免网络跳到服务器渲染之外的任何建议? 我可以检测它是否是服务器呈现然后使用内部 URL(例如:在对同一 Web 服务器的请求上使用 localhost:3000/api/*)或者在使用 Next.js 时这不是最佳实践吗?

服务器需要调用自己来获取数据,获取数据所涉及的很多开销都与延迟有关(即客户端和最近的数据中心之间),当它的(数据中心)时,这将不再是一个问题-> 数据中心)。

如果性能仍然是个问题,您的下一个最佳选择是进行 SSR 缓存,您可以在快速 google 搜索中找到很多不同的方法,但这取决于您的 hosting/setup.

我将 listing-page.jsxapi/listing 路由的处理程序视为相同。您可能需要编写 2 个小函数来提取传递给请求的参数并将其传递给您的服务模块函数,例如 ListingService.getSingleListisng(id)