gpt4 book ai didi

heroku - 如何设置运行时生成的新页面的预呈现 HTML 在 Next.js 中使用增量静态生成 (ISR) 存储的位置,例如AWS S3?

转载 作者:行者123 更新时间:2023-12-04 17:18:31 25 4
gpt4 key购买 nike

假设我有一个像 Medium 克隆的多用户博客网站,当用户从网站本身的 Web UI 创建一个新的博客页面时,我希望它的 HTML 被静态预渲染并从缓存中提供 future 在像 /posts/[user]/[pid] 这样的动态路由下,我无需重新启动服务器或运行任何自定义手动命令来重建静态呈现的缓存。

同样的问题会出现在增量静态生成中,我可能只想在构建时预呈现最活跃查看页面的一个子集。

在本地运行时,生成的预渲染文件将存储在 .next/server/pages 下的本地文件系统中(尽管我在 https://github.com/vercel/next.js/tree/c7596be786ebe1fa5860c0f5efd7781faae0f931/examples 下找不到明确的示例,其中页面在运行时生成)。

但是,在部署时,例如对于 Heroku 和其他 PaaS 系统,我肯定需要一种方法来指定这些新生成的 HTML 页面的存储位置,某种推送/获取适配器,因为 Heroku's filesystem is ephemeral , 而 .next/ 下的那些文件不是在构建时由 next build 生成的,它们可以随时随机消失。也许 Next 只会重新生成它们而用户不会注意到,但我不想打赌,至少会有一些性能影响。所以我可能会使用 Amazon AWS S3 之类的东西来存储这些静态 Assets 。

这是否可能或在某处记录?

我能找到的一些可能相关的主题:

最佳答案

我最终了解了有关 Next.js What is the difference between fallback false vs true vs blocking of getStaticPaths with and without revalidate in Next.js? 的更多信息,这让我的脑海中清晰了一些东西。

首先,ISR 确实会在每次页面命中时触发重建(第 n 个宽限期除外)。但我想要的是一种机制:

  • 当用户更新页面时,使 CDN/S3 失效。更一般地说,我需要对“哪些用户操作可能会改变页面呈现方式”的依赖关系图进行编码,并且他们中的任何一个都必须更改页面。功能请求:https://github.com/vercel/next.js/discussions/11698

  • 如果 CDN/S3 不包含页面,我希望它以某种方式联系我的服务器,以便它可以第一次生成页面,然后将其返回给用户,并更新 CDN

    我不确定 CDN 是否具有该功能,尽管 https://formidable.com/blog/2019/modern-cdns-lambda/ 的“更现代的 CDN”中提到的功能可能允许它

我还使用标准 ISR https://github.com/cirosantilli/node-express-sequelize-nextjs-realworld-example-app/tree/63150b632f5e6feda8ba3b8029e22de25543f162 在 Heroku 上启动了测试,它似乎运行正常,所以当文件系统被破坏时可能会发生的最糟糕的事情是我会丢失一些缓存。它没有我想要实现的设置那么令人惊奇,但由于 CDN 功能,我不确定这是否可能实现,所以我将从标准 ISR 开始,看看它是如何进行的。

关于heroku - 如何设置运行时生成的新页面的预呈现 HTML 在 Next.js 中使用增量静态生成 (ISR) 存储的位置,例如AWS S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67684780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com