1

このテストをチェックしてください:

http://jsperf.com/delegate-on-vs-bind-5

私がしたことは、特定の親を持つ子を委任し、別のイベントを子に直接委任することでした。テスト (少なくとも Chrome で) は、委任方法が直接バインディング方法よりも大幅に高速であることを示しているようです。これは、私が jQuery について読んだすべてのことと、その意図であると私が信じていることの両方に反しています。私のテストは間違っていますか、それとも本当に委譲メソッドを使用する必要がありますか? 親は、子の祖先にそれほど近いわけではないことに注意してください

このフィドルは、イベントがこの DOM と JS で適切にトリガーされることも確認します。

http://jsfiddle.net/WtnRF/

考え?

編集:明確にするために、私の具体的な質問は、このテストで委任メソッド(伝統的に遅いと思われる)がバインドメソッド(速いと思われる)よりもはるかに速いのはなぜですか?

  • 悪いテストを書いただけですか?
  • jsperf ベンチマークは台無しですか?
  • 委任方法の方が優れているので、常に委任方法を使用する必要がありますか?
4

1 に答える 1

1

本当の答えが続くと確信していますが、あなたは考えを求めました。

私の考えでは、最新のシステムでは、特定の構造がパフォーマンスにどのように影響するかを一貫して予測することは事実上不可能です。

これについての説明が得られ、しばらく考えて、それをいじると、それを信じるようになります (または、測定エラーであることが判明するかもしれません)。コーディングを改善する方法についての真の洞察。さらに、ブラウザ/プラットフォーム/バージョン/曜日が異なると、動作が異なる場合があります。

問題は、あなたがたくさん使うことを彼らが期待している構造がある場合 (それは人々が一般的にコーディングする方法であるため)、彼らは最初にそれを最適化し、おそらくより高速に実行することです. この結果、コードの下のレベルで行われたパフォーマンスの向上は、通常、手動で最適化されたコードよりも適切に作成されたコードを改善します。

これは、パフォーマンスのためにコードを書いたり、明確にするためにコードを書いたり、DRY をしたりしてはならないことを意味します。そうすることで、一部の顧客またはマネージャーが遅すぎると判断する障壁にぶつかった場合 (パフォーマンス要件を取得してください!)、もちろん、各プラットフォームで前後の測定値を使用して再コーディングすることを検討してください。比較を行い、「最適化された」ソリューションが実際に明確さの欠如に値し、実際に要件を満たしていることを確認してください。コードでこれを行った理由を文書化して、他の誰かがやって来て、後であなたのくだらないコーディング スタイルのように見えるものを修正しないようにします。

于 2012-05-16T23:10:07.590 に答える