0

環境

Redux アプリケーションを構築しており、アプリケーションの状態に応じてイベント ハンドラーを変更したいと考えclickています。mousemove

これを達成するために、click単一のmousemoveハンドラーをにアタッチすることを計画していdocumentます。これらは、Redux ストアをサブスクライブするスコープに属し、関連する状態を認識します。

ハンドラーを実装するための 2 つの戦略があります。

  1. switch関連する状態変数に対してステートメントを使用します。これswitchは、発生したイベントごとに呼び出す必要があります。
  2. 状態が更新されるたびに参照対象を交換する内部 (スコープへの)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(){}、ノーオペレーションと同じくらい優れているとしたら、私の質問は次のようになります。

switchno-op 関数呼び出しのオーバーヘッドと、ブロック内の等値比較のどちらがパフォーマンスに悪いのでしょうか?

4

0 に答える 0