语境
我正在学习 Nextjs,它是一个用于快速开发反应应用程序的框架,它提供了许多开箱即用的功能,例如服务器端渲染、快速刷新和许多其他开箱即用的功能,无需任何配置。它还提供了一种功能,可以选择性地生成一些静态网页,这些网页在构建时预先呈现,而不是按需呈现。它通过在构建时查询页面所需的数据来实现。Nextjs 还提供了一个可选参数,以秒为单位表示,之后重新查询数据并重新呈现页面。所有这些都发生在页面级别,而不是重建整个网站。
问题
我们无法提前知道数据的变化频率,数据可能会在 1 秒或 10 分钟后发生变化,而且无法提前知道,也很难预测。然而,它肯定不是一个恒定的秒数。使用这种方法,由于时间限制较长,我可能会显示过时的信息,或者即使数据没有更改,我最终也可能会不必要地查询数据库。
假设我已经实现了某种分页,并且我想利用这样一个事实,即大多数用户只会在访问不同链接之前访问前几页。我可以静态预渲染前 1000 个页面,因此访问次数最多的页面是静态提供的,而无需进入数据库,而其余页面则在服务器端渲染。现在,如果我的数据可能经常更改,我将不得不在定期间隔后重新渲染前 1000 个页面,并且每个页面都会针对同一数据库或外部 API 发出单独的查询,这会导致过多的往返行程。我不知道 Nextjs 的细节,但我怀疑这是真的,因为 Nextjs 不假设任何关于提取数据的函数的任何内容,并且通用实现将需要它。
尝试的解决方案
这两个问题都可以通过客户端或服务器端渲染来解决,因为数据将按需获取,但是与查询数据库相比,我们失去了专门为静态资产服务的静态生成的好处。我相信,如果我的数据在大多数情况下不经常发生突变,静态生成将很有用,但我们仍然希望在更新信息可用时尽快显示更新信息。
如果我暂时忘记了 Nextjs,这两个问题都可以通过生成一个新进程来解决,该进程监听相关数据的突变并只重建那些需要更新的静态资产;有点像 React 更新组件,但在服务器端。但是 Nextjs 提供了很多难以复制的功能,所以我不能使用这种方法。
如果我想使用 Nextjs,问题 (1) 似乎无法解决,因为 Nextjs 的限制(感知?)它只提供了一种重建静态页面的方法,在预定时间后定期重新渲染它们。但是,(2)可以通过使用某种内存缓存来解决,该缓存在一次往返中从数据存储中提取所有需要的数据,并为每一页构建它。然后每个页面都会从这个缓存而不是数据库中提取数据。但是,对我来说,它看起来像一个黑客。
问题
还有其他方法可以解决我可能错过的问题吗?
Nextjs中是否有处理问题(1)和(2)的内置方法?
我对尝试的解决方案及其可行性的评估是否正确?