RadeventListener:クライアント側のフレームワークのパフォーマンスの物語
Reactの人気は中傷者がいないわけではありません。特にクライアント側のレンダリングのみに依存している場合、フレームワークのかなりのサイズ(約120キブの模倣)は、スタートアップ時間に大きな影響を与えます。クライアント側の水分補給によるサーバー側のレンダリングでさえ、パフォーマンス集約型のままです。 Reactは複雑な国家管理に優れていますが、そのリソースの要求は、より単純なアプリケーションの利点を上回ることがよくあります。これにより、強力なハードウェアでユーザーが効果的に除外できます。
Reactのパフォーマンスオーバーヘッドについての予約にもかかわらず、コンポーネントモデルとJSX構文に感謝しています。サーバー側のレンダリング(またはプアクトを使用して、私の好みの代替手段)は貴重な資産のままです。ただし、適切なクライアント側の使用法を決定することは依然として課題です。この記事では、ユーザーエクスペリエンスを向上させるためのReact Performanceの最適化に関する私の調査結果について詳しく説明しています。
コンテキスト:RSSフィードアプリ
私のRSSフィードアプリ、 bylines.fyi
は、サーバーとクライアントの両方でJavaScriptを使用しています。私は本質的にクライアント側のフレームワークを嫌うことはありませんが、私の経験は2つの繰り返しの問題を強調しています。
- フレームワークは、基礎となるWebプラットフォームを曖昧にし、それらが本当に有益であるときの深い理解を妨げる可能性があります。
- フレームワークは、常に最適なユーザーエクスペリエンスを保証するとは限りません。
Webフレームワークのパフォーマンスに関するTim KadlecのHTTParchive研究は、これらの懸念を強化し、Reactの恒星以下のパフォーマンスを明らかにします。私の目標は、クライアント側の欠点を軽減しながら、Reactのサーバー側の利点を活用することでした。
実験:モバイルナビゲーショントグル
私のRSSアプリには、単純なモバイルナビゲーショントグルのためにクライアント側のJavaScriptが必要でした。これは、「Simple State」の典型的な例です。このような単純なタスクに対して過剰に使用されているReactコンポーネントがよく見られ、不必要なパフォーマンスのオーバーヘッドにつながります。この実験は、一見些細なことですが、フレームワークの選択がどのように拡大するかを理解するための重要なベンチマークとして機能します。ほとんどの開発者は、このようなマイナーな機能についてReactだけに依存していないことに注意することが重要ですが、結果はランタイムのパフォーマンスに対する建築的意味を示しています。
テスト条件
この実験では、4つのデバイスで3つのモバイルNAV実装を比較しました。
- ステートフルなReactコンポーネント:サーバーレンダリングおよびクライアントhydrated。
- ステートフルプアクトコンポーネント:サーバーレンダリングおよびクライアントhydrated。
- ステートレスプアクト成分:サーバーレンダリング、水分補給されていません。標準のイベントリスナーを使用します。
デバイスが含まれています:
- Nokia 2 Android電話(Chrome 83)
- Asus X550ccラップトップ(Windows10、Chrome 83)
- 第1世代iPhoneSE(Safari 13)
- 第2世代iPhoneSE(Safari 13)
メトリック
次のメトリックは、実装とデバイスごとに測定されました。
- 起動時間:フレームワークの読み込みと水分補給(反応/事前に)、またはイベントリスナーコード(EventListener)を含む。
- 水分補給時間:起動時間のサブセット(反応/事前にのみ)。
- モバイルNAVオープンタイム:イベント処理におけるオーバーヘッドの測定フレームワークの測定。
方法論
テストには、リモートデバッグとプロファイリング、シナリオとデバイスごとに10回の反復にわたって各メトリックのCPU時間の記録が含まれていました。ネットワークのパフォーマンスは要因ではありませんでした。
結果
データの複雑さにより、結果は最小、最大、中央値、および平均CPU時間を示す表形式で提示されます。 (詳細な表は、付随するスプレッドシートで入手できます)。重要な調査結果は次のとおりです。
- Reactの高いスタートアップと水分補給コスト:特にローエンドNokia 2で顕著です。
- PREACTのパフォーマンスの向上:反応よりも大幅に高速ですが、Nokia 2の理想的なフレーム予算を超えています。
- 優れたイベントリスナーのパフォーマンス:特に単純な相互作用のために、反応と事前に対応するよりも一貫して高速です。
ディスカッション:浅いコールスタック
パフォーマンスの違いは、フレームワークの負荷と水分補給のオーバーヘッドに由来しています。一部のパフォーマンストレードオフは開発者の利便性には避けられませんが、バランスはユーザーを犠牲にして開発者エクスペリエンスに対してあまりにも大きく傾いています。反応と事前の水分補給のコールスタックは、特に単純なタスクの重要な処理需要を強調しています。ネイティブのイベントリスナーを使用すると、シンプルな州管理のためのはるかに効率的なアプローチが提供されます。
結論と推奨事項
この分析は、Reactの批評としてではなく、フレームワークの選択とそのパフォーマンスへの影響を批判的に評価する励ましです。いくつかの戦略がパフォーマンスの問題を軽減できます:
- 可能であれば、ステートレスコンポーネントにステートフルコンポーネントをリファクタリングします。
- ステートレスコンポーネントのクライアント側のJavaScriptと水分補給を避けてください。
- 単純なインタラクションのために、フレームワークに依存しないイベントリスナーを使用します。
- 交差点オブザーバーまたは
requestIdleCallback
を使用して、ゆっくりと水和コンポーネントを使用します。 - 事前に反応するより速い代替手段として考えてください。
-
navigator.deviceMemory
を使用して、低メモリデバイスのユーザーエクスペリエンスを適応させます。
さまざまなデバイスでパフォーマンステストを優先し、さまざまなハードウェア機能を持つユーザーに包括性を確保します。目標は、誰にとっても迅速でアクセス可能なWebエクスペリエンスである必要があります。
編集フィードバックとこの記事を公開してくれたCSS-Tricksのスタッフについては、Eric Baileyに感謝します。
以上がRadeventListener:クライアント側のフレームワークのパフォーマンスの物語の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









最近GraphQLの作業を開始した場合、またはその長所と短所をレビューした場合、「GraphQLがキャッシュをサポートしていない」または

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

開発者としての段階に関係なく、私たちが完了したタスクは、大小を問わず、個人的および専門的な成長に大きな影響を与えます。

それは' Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。
