当前位置: 首页 > 知识库问答 >
问题:

前端 - nextjs默认情况下到底缓存不缓存 fetch的响应?

傅星光
2024-12-15

https://nextjs.org/docs/app/building-your-application/data-fe...
image.png


https://nextjs.org/docs/app/building-your-application/caching
image.png

共有2个答案

堵浩波
2024-12-15

截图的两处应该是对应 Data Cache 和 Request Memoization 的两处缓存。
Request Memoization 是针对一个用户多次相同请求的缓存,这个请求在 React 组件树完成渲染后会自动删除,如果在组件树中多次发起相同的请求,也是请求同一份数据。
Data Cache 是针对不同的用户的相同请求产生的缓存,这个缓存支持 Revalidating 特性,应该在缓存层次上比 Request Memoization 高一层。
我猜测是 Request Memoization 是强制性的, Data Cache 可以通过 fetch 的 cache 配置进行修改。
除了这两个外,往外还有两层缓存,Full Route Cache 和 Router Cache
Data Cache 在以下的情况下会选择退出(这是 next 14 时写的笔记,不知道 15 是否有变动)

  * Server Action 中使用

  * Route Handler 中使用了 POST 请求。

  * 设置 { cache: 'no-store' }

  * 设置 next.revalidate = 0 或者是对应的 Route Segment Config options。

  * 使用 Route Segment Config options 并且设置 const dynamic = 'force-dynamic',这样会对 route segment 内的所有请求,包括第三方库的请求造成影响。
龚振濂
2024-12-15

在 Next.js 15 版本之前,fetch 的默认缓存策略是 cache: 'force-cache'。在这些版本中,fetch 请求会默认缓存响应。
从 Next.js 15 版本开始,默认的缓存策略改为 cache: 'no-store',默认情况下不会缓存 fetch 的响应,但是仍然可以通过显式设置 cache 选项来缓存响应。

 类似资料:
  • 问题内容: 我将实体添加到数据库中,并且工作正常。但是,当我检索列表时,会得到旧实体,直到取消取消部署应用程序并再次重新部署它之后,才会显示添加的新实体。这意味着默认情况下会缓存我的实体吗?但是,我没有在persistence.xml或任何此类文件中进行任何用于缓存实体的设置。 我什至尝试调用flush(),refresh()和merge()。但它仍然仅显示旧实体。我想念什么吗?请帮我。 问题答案

  • 问题内容: Hibernate使用的默认缓存的名称是什么?甚至有默认的缓存,还是必须添加缓存提供程序才能利用缓存? 我以为是EHCache,但我认为必须对其进行配置…默认情况下它不是“那里” … 问题答案: Hibernate已经通过持久上下文提供了一种称为 一级缓存 的缓存机制。它在 Session作用域内,默认情况下处于启用状态,无法关闭。 诸如EHCache之类的缓存提供程序提供了另一种称为

  • 问题内容: 在编写RESTful Web服务时,如果在客户端(当前是.NET胖客户端)上启用任何类型的缓存,则会遇到问题。默认情况下,Jersey不发送任何类型的缓存控制标头,因此客户端将自动缓存大多数页面(这似乎是有效的行为)。 我希望默认情况下,Jersey发送“ no-cache”的缓存控件,然后特别是响应将覆盖该缓存控件。 有没有办法用泽西岛做到这一点? 我发现RESTeasy可以使用@N

  • 问题内容: 我正在使用以下代码从服务器提取简单的JSON提要: 有用。但是,在更改JSON文件并验证是否在浏览器中进行了更改之后,当我再次运行该应用程序时,仍会得到先前的响应。 看来AFNetworking正在某种程度上缓存旧的响应。我不要这种行为。我想下载当前的提要。是否需要某种类型的设置或参数来关闭缓存? 问题答案: 简而言之,只需定义您的AFNetworking经理即可: 请享用!

  • 我正在使用咖啡因缓存,并寻找一种方法来更新缓存中的值,而不更改其过期时间。 场景是我使用缓存来加速数据加载。数据更改延迟5秒是可以接受的,而我希望返回速度很快。此外,我希望这些缓存在第一次命中1天后过期,以避免不必要的内存使用。 因此,我希望每个缓存的密钥持续一天,但其值每5秒更新一次。 方法似乎已关闭,但刷新持续时间后的第一个返回值仍然是旧值。这对我来说并不理想,因为两次点击之间的持续时间可能是

  • 问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程

  • 问题内容: 我使用一些GeoIP服务在页面上放置国家/地区标记,具体取决于国家/地区IP。我需要为网站上的所有页面缓存JSON响应。 将此代码放入: 是否可以将其缓存?-似乎不起作用。 或者使用HTML5 localStorage可能更好,但是我不确定该怎么做。 我也尝试了JSONCache插件,但是对我来说不起作用。 问题答案: 您可以这样使用localStorage: 演示 因此,在您的特定情

  • 问题内容: 我正在尝试将Infinispan配置为休眠二级缓存。一切都很好,但是我想调整默认配置,即所有缓存共享的值。 缓存是用于注明实体自动创建的,我可以通过一个在对其进行自定义一个通过。但是,我希望所有这些缓存都具有默认值(例如,逐出策略)。 另一件事是,我想将所有这些生成的缓存标记为“分布式”(默认情况下它们是“本地的”)。 这是我的摘录: 我该怎么做? 问题答案: 实体的默认缓存配置名为: