2016-04-30 14 views
1

コールバック関数を(JavaScriptで)使用すると、同期的に使用するのではなく、パフォーマンス上のペナルティはありますか?例えばパフォーマンスペナルティJavaScriptコールバック関数

method(function(result){}); 

代わりの

var result = method(); 

編集:そして、コールバック関数によって導入オーバーヘッドがある場合、私はなぜ知っているのが大好きです。

ありがとうございます!

+0

私は単純な計算メカニズムでいくつかのテストを行い、非同期コールバックが同期したコールバックより少し遅いことがわかりました。しかし、使用する理由を理解する必要があります。その答えはパフォーマンスよりも並行性です。彼らはEVENT LOOPを通過するため、速度が遅くなります。 –

+0

ありがとうございました!なぜ私はパフォーマンス上のオーバーヘッドがあるのか​​不思議であるので、私は私の質問を編集します。 編集:あなたのコメントを更新しました。説明、ありがとう! – gillesC

答えて

3

戻り値と比較して同期計算でコールバック関数を使用するためのごくわずかなオーバーヘッドがあります。
はい、コールバックは同期的に使用できます。チェックアウト:CPS;またはAPIの一貫性の理由からです。

このオーバーヘッドは、関数をcllingしてコールスタックを維持するオーバーヘッドによってもたらされます。また、コールバックとしてクロージャを頻繁に使用するため、オーバーヘッドが発生することがあります。

これは、パフォーマンス上の理由からv * 2v << 1に置き換えた場合に匹敵するマイクロ最適化です。
コード内でそのようなことを最適化する必要がある場合は、アプリケーションの構造に深刻な問題があります。

コールバックを同期して呼び出すときに言及される唯一の問題は、ある時点で最大スタックサイズを超える可能性があることです。

+0

小メモ: この質問は私の好奇心から生じています。それはプログラミングのスキルが低いから生まれたものではありません。あなたの貢献に感謝します! – gillesC

+2

私はプログラミングのスキルが低いことを暗示しませんでした。私はちょうどこの答えを読んでいるすべての人に話題全体をカバーしようとしました。 – Thomas

関連する問題