JavaScriptの匿名関数と名前付き関数のパフォーマンステスト_基礎知識

WBOY
リリース: 2016-05-16 16:37:17
オリジナル
1221 人が閲覧しました

私たちは匿名関数を通じてコールバックを作成することがよくあります。

簡単に言うと、匿名とは名前のない関数を意味し、通常はすぐに実行されます。しかし、名前付き関数 (名前付き関数) と比較してパフォーマンスはどうなのでしょうか?

シェル コマンドを実行し、多数の関数呼び出しを使用できるコンピューターを見つけて、2 つの実行時間を確認できます。

anonymous.js

コードをコピーします コードは次のとおりです:

変数数 = 100000000
、合計 = 0
while (count--) (function() { sum })()

実行してください
コードをコピー コードは次のとおりです:

$ time ノード anonymous.js
実質0分1.456秒
ユーザー 0分0.015秒
システム 0分0.031秒

名前付き関数を見てみましょう

named.js

コードをコピーします コードは次のとおりです:

変数数 = 100000000
、合計 = 0

var cb = function() {
合計
}

while (count--) cb()


実行してください
コードをコピー コードは次のとおりです:

$ time ノードnamed.js
実質0分0.575秒
ユーザー 0m0.000s
システム 0 分 0.046 秒

名前付き関数ははるかに高速ですが、これはなぜでしょうか?実際、説明するのは難しくありません。匿名関数はコールバックを毎回再解釈する必要がありますが、名前付き関数は 1 回だけ解釈すればよいため、パフォーマンスは向上します。ただし、この改善は非常にわずかであることがテストでわかりました。別の変数として記述された非常に便利なコールバックを分離する必要はありません。

さらに、名前付き関数を記述するには 2 つの方法があります。

関数式

コードをコピーします コードは次のとおりです:

var func = function() {
console.log('a')
}

関数宣言
コードをコピーします コードは次のとおりです:

関数 func() {
console.log('b')
}

実際、
のように、これら 2 つを一緒に使用すると問題が発生する可能性があります。
コードをコピー コードは次のとおりです:

var func = function() {
console.log('a')
}
関数 func() {
console.log('b')
}
// 出力は次のとおりです: a

そのため、現在は関数表現の形式が主流ですが、関数宣言の性能はどうなのでしょうか?

named2.js

コードをコピーします コードは次のとおりです:

変数数 = 100000000
、合計 = 0

関数 cb() {
合計
}

while (count--) cb()


実行して 2 つを比較してください
コードをコピーします コードは次のとおりです:

$ time ノードnamed.js
実質0分0.553秒
ユーザー 0m0.000s
システム 0 分 0.015 秒

$ time ノードnamed2.js
実質0分0.529秒
ユーザー 0m0.000s
システム 0 分 0.047 秒


関数宣言の方が若干速くなるようですが、速度は非常に目に見えません。個人的には、やはり関数宣言を書くことをお勧めします。

追記: このデータは、Windows 7 で git-base を使用してテストされました。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート