「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > すべての開発者が盗む必要があるEACTパフォーマンスパターン(およびそれらを実装する方法)

すべての開発者が盗む必要があるEACTパフォーマンスパターン(およびそれらを実装する方法)

2025-03-04に投稿されました
ブラウズ:573

eact Performance Patterns Every Developer Should Steal (and How to Implement Them)

リアクションアプリのパフォーマンスをブーストすることは、ユーザーエクスペリエンスのポジティブに不可欠です。 この記事では、多数の生産Reactアプリケーションの最適化から収集された7つの実績のあるパフォーマンスパターンの概要を説明します。


  1. メモ化 usememo and usecallback

問題:変更されていない小道具または状態による不必要な再レンダー。

solution:キャッシュ計算上高価な操作と関数参照。

const ExpensiveComponent = ({ items }) => {
  const sortedList = useMemo(() => items.sort((a, b) => a.price - b.price), [items]);
  const handleClick = useCallback(() => {
    console.log('Item clicked:', sortedList[0]);
  }, [sortedList]);
  return ;
};

ベストプラクティス:は、不必要なサブツリーの更新を防ぐために、子コンポーネントの race.memo を使用します。 複雑な計算(ソート、フィルタリング)、最適化された子供に渡されたコールバック、および安定したコンテキストプロバイダーの値に最適です。


  1. レイジーロードとコード分割:

問題:ファーストコンテンツペイント(fcp)に影響を与える大きな初期バンドルサイズ。

solution:ダイナミックインポートと suspense on-demand loading。

const HeavyChartLibrary = React.lazy(() => import('./ChartComponent'));

const Dashboard = () => (
  }>
    {showCharts && }
  
);

Advanced:ルートベースのコード分割のためにReactルーターと統合。


  1. 大規模データセットの仮想化リスト:

問題:何千ものアイテムをレンダリングします。

solution:

race-window レンダリングされたアイテムのみをレンダリングします。

intomp {recose-window 'からintext {sixedsizelist}; const biglist =({items})=>( {({index、style})=>(
...
)} );
import { FixedSizeList } from 'react-window';

const BigList = ({ items }) => (
  
    {({ index, style }) => (
      
...
)}
);
ボーナス:

を使用します。 効率的な状態管理:


    問題:
  1. 複数の状態の更新がカスケード再レンダーを引き起こします。
  2. solution:
React 18の自動バッチングをレバレッジします。

race 18:

setCount(1); settext( 'updated'); //単一の再render

プレオクト前18または複雑なシナリオの場合:

Atomic State Updatesに
setCount(1);
setText('Updated'); // Single re-render

debouncing api呼び出し:


    問題:
  1. 迅速なユーザー入力からの過剰なAPI要求(例:検索バー)。
  2. solution:
custom

usedebounce hook。

Import {effect、useState} from 'race'; const sudeBouncedValue =(value、delay)=> { const [debouncedValue、setDebouncedValue] = uesestate(value); effect(()=> { const handler = setimeout(()=> setDebouncedValue(value)、delay); return()=> cleartimeout(handler); }、[value、delay]); debouncedValueを返します。 }; Pro Tip:

import { useEffect, useState } from 'react';

const useDebouncedValue = (value, delay) => {
  const [debouncedValue, setDebouncedValue] = useState(value);
  useEffect(() => {
    const handler = setTimeout(() => setDebouncedValue(value), delay);
    return () => clearTimeout(handler);
  }, [value, delay]);
  return debouncedValue;
};

最適化コンテキストAPI:


    問題:
  1. 無関係な変更によるコンテキスト消費者の不必要な再レンダー。
  2. solution:
分割コンテキストとメモプロバイダーの値。

楽観的なui更新:


    問題:
  1. API応答を待つために遅いUI。
  2. solution:
即時の視覚的フィードバックとエラーに関するロールバックを提供します。

パフォーマンスチェックリスト:

React DevTools Profilerを使用したプロファイル再レンダー。

バンドルサイズをSource-Map-Explorerで分析します。 Chromeのパフォーマンスタブ(CPUスロットリング)でテストします。

    use
  1. race.memo
  2. usememo
  3. usecallback
  4. 戦略的。
  5. インクリメンタルロードを実装します。 怠zyなロードで画像/メディアを最適化します。 重要なコンテンツのサーバー側のレンダリングを検討してください。
  6. 覚えておいてください:
  7. プロファイル最初に、2番目を最適化します! これらの手法は、さまざまなReactフレームワーク(Next.js、Gatsbyなど)に適用されます。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3