”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Next.js 缓存:通过高效的数据获取来增强您的应用程序

Next.js 缓存:通过高效的数据获取来增强您的应用程序

发布于2024-11-08
浏览:213

Next.js 中的缓存不仅仅是为了节省时间,还在于减少冗余网络请求、保持数据新鲜并使您的应用程序像摇滚明星一样运行。
无论您是想将数据缓存更长时间还是按需刷新,Next.js 都能为您提供所需的所有工具。在本文中,我们将详细介绍如何在 Next.js 中有效地使用缓存

Next.js 扩展了 fetch API,为您提供缓存方面的超能力。使用 cache: 'no-store'cache: 'force-cache' 等简单的获取选项,您可以轻松控制数据缓存的时间和方式。

始终保持新鲜缓存:'no-store'(相当于unstable_noStore())

每次都想要新鲜数据吗? cache: 'no-store' 是可以使用的。此获取选项完全跳过缓存并在每次请求时获取最新数据。当您需要实时准确性时,它是完美的 - 不允许昨天提取的剩余内容。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

注意:如果您想跳过服务器组件上的缓存,还可以使用unstable_noStore()。语法稍后可能会更改,因此请坚持使用 cache: 'no-store' 以确保稳定性。

通过缓存重用数据:'force-cache'(相当于unstable_cache())

另一方面,如果您可以使用缓存数据(考虑不经常更改的静态内容),请使用 cache: 'force-cache'。它将保存响应以供将来使用并跳过冗余的网络请求。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

注意:unstable_cache() 也会缓存数据,但如果您要避免将来发生意外,使用稳定的 cache: 'force-cache' 会更可靠。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

通过重新验证保持新鲜感

有时缓存的数据需要刷新——无论是在特定时间之后还是由事件触发时。幸运的是,Next.js 允许您通过多种方式重新验证缓存的数据。

使用时间重新验证:next.revalidate

如果您的数据需要定期刷新(例如每小时或每天),您可以使用提取请求中的 next.revalidate 选项设置重新验证期。它将在您指定的时间后获取最新数据,同时在其余时间保留缓存内容。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

fetch('https://api.example.com/data', {
  next: { revalidate: 3600 }  // Revalidate data every hour (3600 seconds)
});

带标签的按需重新验证:revalidateTag()

现在,想象一下,您可以告诉 Next.js 在发生重要事件(例如表单提交或新博客文章上线)时刷新缓存数据的特定位。您可以为缓存的数据分配标签,然后在需要时重新验证这些标签。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

这样,您可以根据需要手动刷新部分缓存,而无需等待下一次计划的重新验证。

使用不稳定的方法

如果您是喜欢冒险的人,您还可以直接在服务器组件上使用 unstable_noStore()unstable_cache() 方法来管理缓存行为。请记住,这些“不稳定”是有原因的,因此它们将来可能会发生变化(或者在您阅读时可能已发生变化)。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

或者,如果您热衷于缓存,请按以下方法使用 stable_cache():

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

跳过支柱钻孔

这里有一个巧妙的技巧:如果您要跨多个组件(例如布局、页面和一些内部组件)获取相同的数据,请不要强调在顶部获取一次并将其向下传递或必须在多个组件上多次请求该数据会导致性能下降。 Next.js 在服务器渲染期间自动记住获取请求,这意味着如果您多次获取相同的数据,它足够智能,只需访问网络一次并在多个组件中共享结果。

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

Next.js Caching: Turbocharging Your App with Efficient Data Fetching

总结一下

Next.js 为您提供了有效管理缓存所需的所有工具,无论是通过 fetch API 选项,如 cache: 'no-store'cache: 'force-cache',或者更具实验性的unstable_noStore() 和unstable_cache() 方法。添加 next.revalidaterevalidateTag 等重新验证策略,您就拥有了保持数据新鲜所需的一切。

来源:
Next.js 缓存

版本声明 本文转载于:https://dev.to/samaghapour/nextjs-caching-turbocharging-your-app-with-efficient-data-fetching-51hb?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何访问 Flask 路由中的查询参数和查询字符串?
    如何访问 Flask 路由中的查询参数和查询字符串?
    访问 Flask 路由中的查询字符串使用 Flask 时,必须能够访问查询参数和您的路由中的查询字符串有效处理用户输入和处理数据的路由。让我们探讨一下如何做到这一点。考虑以下示例路线:@app.route("/data") def data(): # query_stri...
    编程 发布于2024-11-08
  • 您的 Java 日志实用程序类是否将其自身报告为日志来源?了解如何修复它!
    您的 Java 日志实用程序类是否将其自身报告为日志来源?了解如何修复它!
    在现代软件开发的快节奏环境中,有效的日志记录对于高效的调试和系统监控至关重要。但是,日志输出中不一致或不准确的行号可能会使故障排除变得非常耗时。最近,我发现我们的内部日志记录实用程序将自身报告为日志来源。需要解决这个问题以提高日志精度。 问题 当使用自定义实用程序类来处理日志时,它...
    编程 发布于2024-11-08
  • 如何通过重复较短的列表来压缩不等长的列表?
    如何通过重复较短的列表来压缩不等长的列表?
    通过重复较短的列表来压缩不同大小的列表当尝试压缩两个长度不等的列表时,内置的 zip 函数会失效通过不重复较短的列表来匹配较大的列表来缩短。为了克服这个问题,需要替代方法。使用 itertools.cycle 的解决方案itertools.cycle 函数提供了无限迭代可迭代对象的能力。可以利用此功...
    编程 发布于2024-11-08
  • 聘请 Unity 开发人员:让沉浸式游戏变得精彩
    聘请 Unity 开发人员:让沉浸式游戏变得精彩
    从游戏开发和互动的高潮中可以明显看出,即使只有一小部分时间,Unity 3D 无疑是用于开发沉浸式多平台体验的最广泛使用的平台之一。您开发移动游戏、虚拟体验、增强现实应用程序 - 无论您的想法是什么,Unity 3D 开发人员现在都可以将其变为现实。然而,找到合适的人才并不容易,尤其是在当今蓬勃发展...
    编程 发布于2024-11-08
  • 如何在页面加载后动态加载较少的样式表?
    如何在页面加载后动态加载较少的样式表?
    动态加载 LESS 样式表您表示有兴趣使用 LESS.js,同时需要在初始页面后动态加载某些样式加载。但是,LESS.js 的现有行为要求所有 LESS 样式表在 LESS.js 脚本之前加载,如下面的功能示例所示:<link rel="stylesheet/less" h...
    编程 发布于2024-11-08
  • 使用 Python 列表的优雅而简单的方法:列表推导式
    使用 Python 列表的优雅而简单的方法:列表推导式
    您可能认为列表理解是一个高级概念。然而,在棘手的情况下,它只需一行就可以简化您的代码。是时候了解它是如何工作的了。我将用示例.在初级水平上解释它 列表理解到底是什么? 您经常看到符号 l2 = [x 1 for x in l]。据说是这样的: l2 = [] for x in l: ...
    编程 发布于2024-11-08
  • 如何从 Java WebDriver 执行 JavaScript 代码?
    如何从 Java WebDriver 执行 JavaScript 代码?
    从Java执行WebDriver JavaScript:增强指南问题中提到的命令./go webdriverjs是一个shell命令设计在特定文件夹中设置并初始化 WebDriverJs 环境。但是,需要注意的是,WebDriverJs 是一种语言绑定,它支持 JavaScript 测试,而不是从 ...
    编程 发布于2024-11-08
  • 为我的 D&D 表构建自定义 Stream Deck:使用自定义 SDK 解决游戏手柄集成问题
    为我的 D&D 表构建自定义 Stream Deck:使用自定义 SDK 解决游戏手柄集成问题
    作为一名热情的龙与地下城玩家和技术爱好者,我决定通过创建一个带有嵌入式屏幕的定制咖啡桌来提升我的游戏设置。该桌子显示地图、代币、播放音效,甚至为玩家展示艺术品。所有这一切都通过一个名为 Foundry VTT 的强大平台运行,该平台与 Roll20 类似,但具有更好的定价模型和广泛的开放模块系统。它...
    编程 发布于2024-11-08
  • 如何在 PHP 中高效计算两个日期之间的月份数?
    如何在 PHP 中高效计算两个日期之间的月份数?
    有效查找日期之间的月份计数一个常见的编程挑战是确定两个日期之间的月份数。在 PHP 中,有多种方法可以解决这个问题。使用 DateTime 类 (PHP >= 5.3):PHP 5.3 中引入的 DateTime 类提供了方便的方法用于日期操作。计算月份差异:$d1 = new DateTime(&...
    编程 发布于2024-11-08
  • Bootstrap:创建和自定义导航栏
    Bootstrap:创建和自定义导航栏
    介绍 Bootstrap 是一个开源框架,广泛用于 Web 开发,用于创建响应式且适合移动设备的网站。 Bootstrap 的关键组件之一是导航栏,它是一个水平导航栏,用于组织和导航网站的内容。在本文中,我们将讨论使用 Bootstrap 创建和自定义导航栏的优点和缺点及其功能。 ...
    编程 发布于2024-11-08
  • 将 WebSocket 与 Python 结合使用
    将 WebSocket 与 Python 结合使用
    什么是 WebSocket? WebSocket 是一种支持浏览器和服务器之间实时、双向通信的协议。传统的 HTTP 通信涉及客户端发送请求和服务器响应以交换数据。相比之下,使用 WebSocket,一旦建立了初始连接,客户端和服务器都可以相互发送和接收消息,而无需重复建立新连接。...
    编程 发布于2024-11-08
  • 如何在 PHP 中从子域中提取域名?
    如何在 PHP 中从子域中提取域名?
    在 PHP 中从子域中提取域名在当代 Web 开发中,必须解析和检索域名,甚至是从子域中解析和检索域名。一个简单的示例可能包括诸如“here.example.com”或“example.org”之类的域名。为了满足这一需求,我们提出了一个全面的 PHP 函数,旨在从任何给定的输入中提取根域名。结合使...
    编程 发布于2024-11-08
  • 如何在多线程编程中连接向量以获得最佳效率?
    如何在多线程编程中连接向量以获得最佳效率?
    连接向量:深入分析在多线程编程中,合并结果是一个常见的挑战。这通常涉及将多个向量组合成单个综合向量。让我们探索连接向量以获得最大效率的最佳方法。最佳连接方法为了高效的向量连接,最佳实践是利用保留和插入方法:AB.reserve(A.size() B.size()); // Preallocate...
    编程 发布于2024-11-08
  • 如何优化FastAPI以实现高效的JSON数据返回?
    如何优化FastAPI以实现高效的JSON数据返回?
    FastAPI 返回大型 JSON 数据的优化通过 FastAPI 返回大量 JSON 数据集可能是一项耗时的任务。为了解决这个瓶颈,我们探索提高性能的替代方法。识别瓶颈:使用 json.dumps 将 Parquet 文件解析为 JSON 的初始方法( ) 和 json.loads() 效率低下。...
    编程 发布于2024-11-08
  • React:状态 X 派生状态
    React:状态 X 派生状态
    什么是派生状态?考虑文本的一种状态,然后考虑大写文本的另一种状态。 导出状态 function Foo() { const [text, setText] = useState('hello, za warudo!'); const [uppercaseText, s...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3