免責事項:私はjsPerf.comの作成者です。
最初のテストは次のとおりです。
var i = 0;
for (i = 0; i < 1000; i++) {
test()
}
for
そこにループを含めるのはなぜですか?結果を歪めるだけです。jsPerf は、統計的に有意な結果を得るのに十分なテストを実行するまで、テスト コードを自動的に繰り返します。理想的には、jsPerf テストはできるだけコンパクトで、本当にテストしたいものだけをテストします。この場合、for
ループのパフォーマンスにはまったく関心がありません。関数を呼び出すよりもコードをインライン化する方が速いかどうかを知りたいだけです。
堅牢な jsPerf テスト ケースの作成に関するその他のヒントに興味がある場合は、私の #jsconfeu2011 プレゼンテーション をご覧ください。
for
注:この結果が表示される理由が冗長ループにあると言っているわけではありません。それは要因かもしれませんが、結果をさらにゆがめる何か他のものがあるかもしれません. これは、IE9 の「デッド コードの削除」機能が開始された可能性があります。
とにかく、私はあなたの jsPerf テストをフォークし、ループを削除し、変数をグローバルにして、デッド コードの除去の最適化を回避しようとしました。http://jsperf.com/function-calls-vs-inline/3 IE9 でこれをテストできますか? 現在、手元にある IE9 VM はありません。