0

0

了解 React Cache 功能

DDD

DDD

发布时间:2024-09-12 18:21:15

|

815人浏览过

|

来源于dev.to

转载

了解 react cache 功能

随着react生态系统的不断扩大,优化数据获取的更强大的工具之一就是缓存功能。此内置功能允许您执行许多操作,例如有效管理和存储服务器数据、减少冗余网络请求以及提高整体应用程序性能。

在本文中,我们将了解 react 中的缓存功能、它的好处以及如何使用它。

什么是react缓存功能

react 发布的缓存功能是为了优化性能而设计的。它是通过在将相同的参数传递给函数时避免不必要的计算来实现的。这可以通过一种称为记忆的机制来实现,即存储函数调用的结果,并在相同的输入再次发生时重新使用。

react 的缓存功能有助于防止函数使用相同的参数重复执行,从而节省计算资源并提高应用程序的整体效率。

要使用缓存函数,您需要用缓存包装目标函数,react 负责存储函数调用的结果。当使用相同的参数再次调用包装的函数时,react 首先检查缓存。如果这些参数的结果存在于缓存中,它将返回缓存的结果,而不是再次执行该函数。

此行为确保函数仅在必要时运行,即当参数与之前看到的参数不同时。

这是一个简单的示例,演示如何使用 react 的缓存功能在从天气应用程序获取数据时跳过重复的工作:

import { cache } from 'react';
import { Suspense } from 'react';

const fetchWeatherData = async (city) => {
  console.log(`Fetching weather data for ${city}...`);
  // Simulate API call
  await new Promise(resolve => setTimeout(resolve, 2000));
  return { 
    temperature: Math.round(Math.random() * 30),
    conditions: ['Sunny', 'Cloudy', 'Rainy'][Math.floor(Math.random() * 3)]
  };
};

const getCachedWeatherData = cache(fetchWeatherData);

async function WeatherWidget({ city }) {
  const weatherData = await getCachedWeatherData(city);
  return (
    <div>
      <h2>Weather in {city}</h2>
      <p>Temperature: {weatherData.temperature}°C</p>
      <p>Conditions: {weatherData.conditions}</p>
    </div>
  );
}

function WeatherDashboard() {
  return (
    <div>
      <Suspense fallback={<div>Loading New York weather...</div>}>
        <WeatherWidget city="New York" />
      </Suspense>
      <Suspense fallback={<div>Loading London weather...</div>}>
        <WeatherWidget city="London" />
      </Suspense>
      <Suspense fallback={<div>Loading New York weather...</div>}>
        <WeatherWidget city="New York" /> {/* Duplicate */}
      </Suspense>
      <Suspense fallback={<div>Loading Tokyo weather...</div>}>
        <WeatherWidget city="Tokyo" />
      </Suspense>
    </div>
  );
}

export default WeatherDashboard;

在上面的代码中,缓存函数应用于 fetchweatherdata,创建了一个新函数 getcachedweatherdata 来存储天气数据获取的结果。然后,在 weatherwidget 组件中使用此缓存函数来检索不同城市的天气信息。

weatherdashboard 组件呈现 weatherwidget 的多个实例,其中包括纽约的重复实例,这是故意的。这是缓存机制的关键概念证明,因为它可以通过重用第一次调用的缓存结果来防止在渲染周期内多次请求相同数据时出现冗余且昂贵的操作,从而避免不必要的网络请求。

这种缓存机制有几个优点:它减少了 api 调用的次数,从而提高了性能并降低了服务器负载;它确保请求相同信息的组件之间的数据一致性;它通过自动处理潜在的重复请求来简化组件代码。

需要注意的是,react 的缓存功能仅适用于服务器组件。每次对缓存的调用都会创建一个新的记忆函数,这意味着使用同一函数多次调用缓存将导致产生不共享相同缓存的单独记忆版本。

还有一点需要注意的是,缓存函数会缓存成功的结果和错误的结果。因此,如果函数对某些参数抛出错误,该错误将被缓存,并在使用相同参数的后续调用时重新抛出。

此功能是 react 提高性能和效率的更广泛策略的一部分,补充了虚拟 dom 以及 usememo 和 usecallback 挂钩等现有机制,这些机制还采用记忆技术来优化组件渲染和函数引用。

Keevx
Keevx

一款专为海外中小企业和创作者打造的AI数字人视频创作平台

下载

缓存功能的好处

使用 react 缓存功能的好处主要围绕性能优化,特别是减少不必要的计算和数据获取操作。以下是缓存功能的一些主要优点:

  • 提高应用程序性能:缓存有助于通过跨多个组件重用缓存数据来减少所需的服务器请求数量。这会带来更快的响应时间和更流畅的用户体验,因为应用程序等待获取或计算数据的时间更少。

  • 高效数据获取:在涉及数据获取的场景中,尤其是在服务器端渲染或静态生成上下文中,缓存可以显着减少需要从服务器获取的数据量。这对于频繁请求相同数据或数据获取在性能方面成本较高的应用程序特别有用。

  • 减少服务器负载:通过从缓存提供数据而不是向服务器发出新请求,缓存有助于更均匀地分配负载。这可以提高后端服务的可扩展性和可靠性,因为它们不会被频繁的相同请求淹没。

  • 增强的用户体验:更快的加载时间和减少的延迟有助于提供更好的用户体验。用户可以更快地与应用程序交互,因为应用程序花费更少的时间来获取或计算数据。

  • 对高级缓存策略的支持:react 的缓存功能补充了其他缓存机制和策略,例如记忆化(usememo)和回调记忆化(usecallback)。这些工具共同提供了优化 react 应用程序的综合方法,使开发人员能够根据特定需求微调性能。

何时使用缓存功能

您可以在需要时使用缓存功能:

  • memoize 昂贵的数据获取:如果您的服务器组件依赖于从 api 获取数据或执行复杂的计算,则使用缓存包装数据获取功能可以显着提高性能。对于相同的参数,该函数只会执行一次,后续渲染将使用缓存的结果。

  • 预加载数据:您可以利用缓存在组件渲染之前预加载数据。这对于需要在初始渲染时立即可用的关键数据特别有用。

  • 跨组件共享结果:当多个服务器组件需要从服务器获取相同的数据时,使用缓存可确保发出单个请求,并且结果在所有组件之间共享,从而减少冗余服务器调用。

结论

next.js 中的缓存功能与 react 的内置缓存功能相结合,提供了一个强大的工具包,用于优化应用程序中的数据获取和组件渲染。通过策略性地缓存数据和计算,您可以显着提高性能,减少不必要的 api 调用,并增强用户体验。

请记住,react 的缓存功能是一项实验性功能,可能会发生变化。请始终参阅最新的 react 文档以获取最新信息和使用指南。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

532

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

576

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

6357

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

494

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

240

2023.09.14

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

303

2023.09.21

c++ 字符处理
c++ 字符处理

本专题整合了c++字符处理教程、字符串处理函数相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号