環境
Redux アプリケーションを構築しており、アプリケーションの状態に応じてイベント ハンドラーを変更したいと考えclick
ています。mousemove
これを達成するために、click
単一のmousemove
ハンドラーをにアタッチすることを計画していdocument
ます。これらは、Redux ストアをサブスクライブするスコープに属し、関連する状態を認識します。
ハンドラーを実装するための 2 つの戦略があります。
switch
関連する状態変数に対してステートメントを使用します。これswitch
は、発生したイベントごとに呼び出す必要があります。- 状態が更新されるたびに参照対象を交換する内部 (スコープへの)
scope._clickHandler
およびプロパティを参照します。scope._moveHandler
質問1:
戦略 2 を選択した場合、mousemove
ほとんどの場合、ハンドラーは何もしないでください。しかしmousemove
、たくさん解雇されます!scope._moveHandler
プロパティにバインドできる最もパフォーマンスの高い no-op 関数は何ですか?
質問2:
switch
最良のケース (w/r/t 質問 1) では、戦略 1 で使用されるステートメントが 10 から 100 のケースをテストする必要があると仮定すると、戦略 2 は戦略 1 よりもパフォーマンスが高くなりますか?
明確化
このアプローチでは、イベントが発生したときに常に 1 つの「委任」関数が呼び出されます。その関数は、状態プロパティに応じて異なることを行います。これは、その状態を で一致させるか、単に異なる「委任先」関数を状態としてswitch
バインドすることによって行われます。
質問 1 は、最適な何もしない「委譲」関数について質問しますが、質問 2 はswitch
、コールバックに大きなブロックがあることによって生じるパフォーマンスの低下について質問しmousemove
ます。
私たちコミュニティが@nnnnnnの直観に同意する場合function(){}
、ノーオペレーションと同じくらい優れているとしたら、私の質問は次のようになります。
switch
no-op 関数呼び出しのオーバーヘッドと、ブロック内の等値比較のどちらがパフォーマンスに悪いのでしょうか?