ホームページ > ウェブフロントエンド > jsチュートリアル > すべての開発者が盗む(およびそれらを実装する方法)EACTパフォーマンスパターン

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

Mary-Kate Olsen
リリース: 2025-01-28 12:30:12
オリジナル
711 人が閲覧しました

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

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


  1. およびuseMemouseCallbackによるメモ

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

ソリューション:計算上の高価な操作と関数参照をキャッシュします

<code class="language-javascript">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 <ChildComponent onClick={handleClick} />;
};</code>
ログイン後にコピー
ベストプラクティス:

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

怠zyな読み込みとコード分割:
  1. 問題:
  2. 最初のコンテンツペイント(FCP)に影響を与える大きな初期バンドルサイズ。

解決策:ダイナミックインポートとオンデマンド負荷の場合

Advanced: React Routerと統合して、ルートベースのコード分割 Suspense

大規模なデータセットの仮想化リスト:
<code class="language-javascript">const HeavyChartLibrary = React.lazy(() => import('./ChartComponent'));

const Dashboard = () => (
  <React.Suspense fallback={<Spinner />}>
    {showCharts && <HeavyChartLibrary />}
  </React.Suspense>
);</code>
ログイン後にコピー

問題:
何千ものアイテムをレンダリングすると、domを圧倒します
  1. 解決策:目に見えるアイテムのみをレンダリングします。

ボーナス:ダイナミックな列の高さにを使用し、レスポンシブコンテナの場合は

を使用します。

react-window効率的な国家管理:

<code class="language-javascript">import { FixedSizeList } from 'react-window';

const BigList = ({ items }) => (
  <FixedSizeList height={600} itemCount={items.length} itemSize={35} width="100%">
    {({ index, style }) => (
      <div style={style}>...</div>
    )}
  </FixedSizeList>
);</code>
ログイン後にコピー

問題:VariableSizeList複数の状態更新がカスケード再レンダーを引き起こします。react-virtualized-auto-sizer


解決策:
    レバレッジReact 18の自動バッチング。
  1. 反応18:

プリの反応18または複雑なシナリオの場合:

アトミック状態の更新に

を使用します。>

debouncing api呼び出し:

<code class="language-javascript">setCount(1);
setText('Updated'); // Single re-render</code>
ログイン後にコピー

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

解決策:
カスタム
    フック。
  1. Proのヒント:
と組み合わせて、保留中のリクエストをキャンセルします

最適化されたコンテキストAPI:

useDebounce

問題:
<code class="language-javascript">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;
};</code>
ログイン後にコピー
無関係な変更により、コンテキスト消費者の不必要な再レンダー。

解決策:コンテキストとメモのプロバイダー値を分割します AbortController


    楽観的なUIアップデート:
問題:API応答を待っているため、

slow UI。

解決策:即時の視覚的フィードバックとエラーに関するロールバックを提供します。


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

    React DevTools Profilerを使用した
  1. 再レンダー。
  2. ソースマップエクスプラーを使用してバンドルサイズを分析します Chromeのパフォーマンスタブ(CPUスロットリング)を使用した
  3. テスト。
  4. React.memouseMemoを戦略的に使用します。useCallback
  5. インクリメンタル負荷を実装します
  6. 怠zyなロードで画像/メディアを最適化します。
  7. 重要なコンテンツのサーバー側のレンダリングを検討してください。
覚えておいてください:

最初にプロファイル、2番目を最適化してください! これらの手法は、さまざまなReactフレームワーク(Next.js、Gatsbyなど)に適用されます。

以上がすべての開発者が盗む(およびそれらを実装する方法)EACTパフォーマンスパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート