日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

現在停止濫用useMemo吧!

來源: 責編: 時間:2024-06-05 17:46:32 215觀看
導讀在React應用中過度優化真的是一種噩夢。我們每天都要面對大量無用的優化,這些優化意在使代碼變得“神秘”。一些開發人員甚至將 useMemo 和 useCallback 納入他們的默認風格指南中,以簡化事情。不要陷入這種迷思,因為 us

ZtL28資訊網——每日最新資訊28at.com

在React應用中過度優化真的是一種噩夢。我們每天都要面對大量無用的優化,這些優化意在使代碼變得“神秘”。一些開發人員甚至將 useMemo 和 useCallback 納入他們的默認風格指南中,以簡化事情。不要陷入這種迷思,因為 useMemo 甚至可能會減慢你的應用程序速度!記住,記憶化并不是免費的。ZtL28資訊網——每日最新資訊28at.com

在這篇文章中,向你展示大多數開發人員如何過度使用 useMemo 鉤子,并提供一些避免這種情況的技巧。當我第一次意識到我犯了這些錯誤時,我感到非常愚蠢。話不多說,開始吧!ZtL28資訊網——每日最新資訊28at.com

為什么我們使用useMemo?

useMemo 是一個允許我們在組件重新渲染之間緩存計算結果的鉤子。毫無疑問,它僅用于性能原因,并且應該與其他技術如 React.memo、useCallback、debouncing、并發渲染等一起使用。ZtL28資訊網——每日最新資訊28at.com

盡管在某些情況下,這個鉤子確實有幫助,并且發揮了重要作用,但大多數開發人員卻錯誤地使用它。他們將每個變量都用 useMemo 包裹起來,希望隨機的優化能帶來成功。不出所料,這種方法只會導致代碼可讀性差和內存使用增加。ZtL28資訊網——每日最新資訊28at.com

另一個需要記住的重要事項是,useMemo 只有在重新渲染階段才有價值。在初始化期間,記憶化(memoization)會減慢應用程序的速度,并且這種影響會逐漸累積。這就是我所說的“記憶化并不是免費的”的意思。ZtL28資訊網——每日最新資訊28at.com

什么時候它沒有用甚至有害?

現在,看看下面的例子。這些都是我從一個項目中拿來的真實代碼片段。你能說出哪個useMemo的使用實際上有意義嗎?ZtL28資訊網——每日最新資訊28at.com

export const NavTabs = ({ tabs, className, withExpander }) => {  const currentMainPath = useMemo(() => {    return pathname.split("/")[1];  }, [pathname]);  const isCurrentMainPath = useMemo(() => {    return currentMainPath === pathname.substr(1);  }, [pathname, currentMainPath]);  return (    <StyledWrapper>      <Span fontSize={18}>        {isCurrentMainPath ? (          t(currentMainPath)        ) : (          <StyledLink to={`/${currentMainPath}`}>            {t(currentMainPath)}          </StyledLink>        )}      </Span>    </StyledWrapper>  );};

通常我們在兩種情況下使用 useMemo:記住一個引用并將其傳遞給 memo 組件,或緩存一些昂貴的計算。ZtL28資訊網——每日最新資訊28at.com

現在想一想,我們在上面的例子中優化了什么?我們有原始值,并沒有將任何更深層次的內容傳遞到組件樹中,所以我們不需要保留引用。而且.split和===似乎不是需要記憶化的復雜計算。因此,我們可以輕松地在這個例子中去掉useMemo,節省一些文件空間 :)ZtL28資訊網——每日最新資訊28at.com

export const Client = ({ clientId, ...otherProps }) => {  const tabs = useMemo(    () => [      {        label: t("client withdrawals"),        path: `/clients/${clientId}/withdrawals`      },      ...    ],    [t, clientId]  );    ...    return (    <>      ...      <NavTabs tabs={tabs} />    </>  )}export const NavTabs = ({ tabs, className, withExpander }) => {  return (    <Wrapper className={className} withExpander={withExpander}>      {tabs.map((tab) => (        <Item          key={tab.path}          to={tab.path}          withExpander={withExpander}        >          <StyledLabel>{tab.label}</StyledLabel>        </Item>      ))}    </Wrapper>  );};

在上面的例子中,我們將tabs變量記憶化,然后將其傳遞給 NavTabs。你認為優化tabs創建的主要意圖是什么?這根本不是一個計算問題,所以實現它的人可能是想要保留引用并避免 NavTabs 的過度重新渲染。這在這里是正確的做法嗎?ZtL28資訊網——每日最新資訊28at.com

首先,NavTabs 是一個輕量級組件,可以多次重新渲染而不影響性能。其次,即使它是一個重量級組件,useMemo 也不會起作用。僅僅保留引用不足以防止 NavTabs 在每次Client組件重新渲染時重新渲染。為了優化性能,我們應該用React.memo包裹 NavTabs。ZtL28資訊網——每日最新資訊28at.com

memo 函數返回我們組件的記憶化版本。只要它的 props 沒有改變,這個版本通常不會在其父組件重新渲染時重新渲染。memo 使用淺比較props來決定組件是否應該更新。如果你有一些特定條件來決定組件何時應該重新渲染,你甚至可以指定自己的比較函數作為 memo 的第二個參數。ZtL28資訊網——每日最新資訊28at.com

如何判斷計算是否昂貴?

除非你在執行成千上萬項復雜循環或計算階乘,否則它可能不昂貴。你可以結合使用React Profiler和performance.now()來識別瓶頸,然后再應用優化技術。ZtL28資訊網——每日最新資訊28at.com

避免在以下情況下使用 useMemo:ZtL28資訊網——每日最新資訊28at.com

  • 試圖優化的計算很便宜。在這些情況下,使用useMemo的開銷將超過其帶來的好處。
  • 不確定是否需要記憶化。最好先不使用它,然后在出現問題時逐步將優化引入代碼。
  • 記憶化的值沒有傳遞到組件中。如果該值僅在JSX中使用,并且沒有傳遞到組件樹中,大多數情況下你可以避免優化。沒有必要記住它的引用,因為它不會影響其他組件的重新渲染。
  • 依賴數組變化太頻繁。在這種情況下,useMemo不會帶來任何性能優勢,因為它每次都會重新計算。

如何正確使用的技巧

React 組件每次重新渲染時都會運行其主體,這發生在其道具或狀態發生變化時。通常情況下,我們希望避免在渲染過程中進行昂貴的計算,因為它們會減慢組件的運行速度。ZtL28資訊網——每日最新資訊28at.com

然而,大多數計算仍然非???,因此很難理解哪些地方確實需要使用 useMemo。要開始有效且有目的性地進行優化,首先應找出問題所在。此外,不要忘記其他技術,例如:useCallback、React.memo、debouncing、代碼拆分、lazy-loading 等。ZtL28資訊網——每日最新資訊28at.com

我們看下面一個非常簡單的例子。doCalculation 是一個人為放慢速度的函數,因此它需要 500ms 才能返回一個隨機數。那么我們在這里遇到了什么問題呢?是的,每次值更新時,我們都要重新計算我們的重函數,這使得使用輸入變得非常困難。ZtL28資訊網——每日最新資訊28at.com

function doCalculation() {  const now = performance.now();  while (performance.now() - now < 500) {    // 停頓500毫秒  }  return Math.random();}export default function App() {  const [value, setValue] = useState(0);  const calculation = doCalculation();  return (    <div>      <input value={value} onChange={(e) => setValue(e.target.value)} />      <h1>{`Calculation is ${calculation}`}</h1>    </div>  );}

我們如何解決這個問題?只需用useMemo包裹doCalculation而不加任何依賴項。ZtL28資訊網——每日最新資訊28at.com

const calculation = useMemo(() => doCalculation(), []);

現場實例:ZtL28資訊網——每日最新資訊28at.com

https://codesandbox.io/s/happy-grass-0mjpbw?from-embed。ZtL28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-92175-0.html現在停止濫用useMemo吧!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Spring Boot 性能太差?試試這幾招!

下一篇: 項目亮點:分析與解決小程序頁面切換過程卡頓的問題

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結?,F在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • OPPO K11搭載高性能石墨散熱系統:旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼
  • 微軟發布Windows 11新版 引入全新任務欄狀態

    近日,微軟發布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務欄等,系統更流暢了。更新中,Windows 11加入了專門針對平板優化的任務欄
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久久另类综合| 日韩视频精品| 国产精品激情电影| 国产精品自拍视频| 海角社区69精品视频| 136国产福利精品导航| 亚洲精品久久7777| 在线亚洲观看| 欧美尤物巨大精品爽| 久久精品一区二区| 欧美国内亚洲| 国产精品区一区二区三区| 国产日韩欧美在线播放| 激情综合在线| 夜夜嗨av一区二区三区| 午夜精品久久久久99热蜜桃导演| 欧美一区二区在线免费观看| 蜜月aⅴ免费一区二区三区| 欧美日韩1234| 国产网站欧美日韩免费精品在线观看 | 久久亚洲综合色| 欧美日韩国产限制| 国产色产综合色产在线视频| 亚洲国产1区| 亚洲欧美在线免费观看| 裸体丰满少妇做受久久99精品| 欧美日韩情趣电影| 国内自拍一区| 中文日韩电影网站| 久久亚洲综合色| 欧美性猛交xxxx乱大交退制版 | 正在播放亚洲| 久久久久久一区二区三区| 欧美一区二区三区四区在线观看| 嫩草影视亚洲| 国产精品亚洲一区| 亚洲老司机av| 久久久夜色精品亚洲| 欧美日在线观看| 在线视频观看日韩| 午夜精品福利一区二区蜜股av| 欧美1区3d| 国产毛片一区| 99精品视频一区| 久久躁日日躁aaaaxxxx| 国产精品久久久久免费a∨大胸| 伊人久久大香线蕉av超碰演员| 国产精品99久久久久久久久久久久 | 猛干欧美女孩| 国产欧美日本一区视频| 亚洲免费久久| 久久综合伊人77777麻豆| 国产精品一区二区你懂得| 亚洲三级视频| 久久综合中文字幕| 国产亚洲综合精品| 亚洲欧美精品伊人久久| 欧美成人69av| 国内一区二区在线视频观看| 亚洲免费伊人电影在线观看av| 欧美激情第8页| 在线免费高清一区二区三区| 亚洲国产成人精品女人久久久| 亚洲影院高清在线| 欧美18av| 亚洲高清网站| 久久久久久久综合| 国产精品美女主播在线观看纯欲| 亚洲精品美女91| 美女久久网站| 伊大人香蕉综合8在线视| 欧美一区亚洲二区| 国产精品一级二级三级| 亚洲一二三区精品| 欧美三级网页| 一区二区三区四区国产| 欧美日本三级| 亚洲精品中文字幕有码专区| 欧美v日韩v国产v| 亚洲高清中文字幕| 噜噜噜久久亚洲精品国产品小说| 韩国三级在线一区| 欧美一区二区高清在线观看| 欧美亚日韩国产aⅴ精品中极品| 一本色道婷婷久久欧美| 欧美日韩精品在线| 一本到12不卡视频在线dvd| 欧美激情一区二区在线| 亚洲精品国产精品国自产观看浪潮| 欧美99久久| 亚洲精品麻豆| 欧美欧美天天天天操| 亚洲精品精选| 欧美人与性禽动交情品 | 国产精品一区二区三区久久久| 亚洲专区在线视频| 国产精品男gay被猛男狂揉视频| 亚洲一区二区三区中文字幕在线 | 久久精品123| 黄色成人在线免费| 久热国产精品视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩一二三四五区| 夜夜爽www精品| 国产精品成人观看视频免费| 亚洲一区二区欧美| 国产精品网站视频| 久久国产精品一区二区| 一区二区三区在线观看视频| 欧美aⅴ一区二区三区视频| 亚洲乱码国产乱码精品精 | 国产精品theporn| 亚洲欧美日韩国产成人精品影院| 国产欧美一区二区精品性色| 久久久999精品| 亚洲国产精品久久精品怡红院| 欧美精品二区三区四区免费看视频| 99这里只有精品| 国产精品一区久久久| 久久久久一区二区| 亚洲精品美女91| 国产精品视频一二| 久久婷婷蜜乳一本欲蜜臀| 亚洲精品视频在线观看免费| 欧美视频在线免费看| 久久成年人视频| 亚洲国产日韩欧美一区二区三区| 欧美日韩视频| 性感少妇一区| 亚洲国产精品日韩| 国产精品v欧美精品v日韩精品| 欧美一区二区三区在线免费观看| 一色屋精品视频免费看| 欧美日韩亚洲国产一区| 欧美一区精品| 亚洲美女中文字幕| 国产欧美精品日韩精品| 欧美暴力喷水在线| 亚洲女同在线| 亚洲国产视频一区| 国产精品一级二级三级| 久久综合伊人77777尤物| 99热这里只有精品8| 国产丝袜一区二区| 欧美日韩国产成人在线91| 欧美一激情一区二区三区| 亚洲国产欧美精品| 国产精品久久久久久一区二区三区| 久久久久久久久久久成人| 日韩系列欧美系列| 国产一区二区三区精品久久久| 欧美成人免费在线视频| 午夜精品av| 亚洲人成在线观看| 国产小视频国产精品| 欧美日韩高清一区| 久久久青草青青国产亚洲免观| 一本色道久久综合狠狠躁篇的优点| 国产中文一区| 欧美系列精品| 欧美激情视频在线播放| 久久精品人人| 亚洲伊人色欲综合网| 亚洲精品国产品国语在线app| 国产专区综合网| 国产精品久久久久久久久久三级 | 鲁大师成人一区二区三区 | 欧美中文在线视频| 一区二区欧美精品| 亚洲福利在线观看| 国产色婷婷国产综合在线理论片a| 欧美精品在线一区二区| 久久视频在线免费观看| 亚洲欧美成人综合| 夜夜嗨网站十八久久| 悠悠资源网久久精品| 国产欧美精品一区aⅴ影院| 老牛嫩草一区二区三区日本| 性欧美18~19sex高清播放| 99re6这里只有精品视频在线观看| 精品91在线| 国产日韩欧美制服另类| 国产精品国产馆在线真实露脸| 欧美国产在线电影| 美女黄毛**国产精品啪啪| 欧美在线观看网址综合| 亚洲在线视频网站| 一区二区免费看| 亚洲免费观看视频| 亚洲精品国产日韩| 亚洲国产网站| 在线日韩电影| 雨宫琴音一区二区在线| 国内精品视频在线播放| 国产一区二区久久精品| 国产日韩av高清| 国产欧美视频一区二区| 国产日本欧美一区二区三区| 国产美女精品在线| 国产欧美日韩综合| 国产一区91精品张津瑜| 国内精品视频久久| 极品尤物av久久免费看| 影音欧美亚洲|