2011-01-20 15 views
4

このベンチマークによれば、 http://jsperf.com/function-vs-function の作成関数は約1000倍高速に実行されます。あなたはこれをコメントできますか?javascript関数と新しい関数

+4

欠陥のあるマイクロベンチマークに欠陥があります。それとは別に、あなたは主にここで 'console.log'のパフォーマンスをテストしています:) –

+0

あなたはかなり正しいです!!!!! – Dan

+0

私のコンピュータでは、+/- 3%以内で交互に実行されます。数回、私は両方のシナリオで全く同じ時間を得ました。 –

答えて

5
  1. f1ですが、f2ではありません。私。あなたの2番目のテストは何もしておらず、参照を探しています。
  2. すべての作業は実際にテストのセットアップとして行われます。私はあなたが何をしたいと思います

は、これは実際にある:http://jsperf.com/function-vs-function/2 更新:考え直しで、あなたはこれを望んでいない可能性があります。しかし、あなたの2番目のテストは何もしていません。あなたはf2()が欠落している;)

のでnew Functionが道遅くあることに加えて、関数の本体を維持することも困難である。)

2

new Function -syntaxで、すべての機能JS-コンパイラの[...]

たびFunctionコンストラクタ が ソースコード、スクリプトを表す文字列に呼び出された:これは遅く、可能な場合は避けるべきである - 「evalの」関数本体文字列に開始する必要がありますエンジンは は、 ソースコードを実行可能コードに変換する機械を起動します。この は、通常はパフォーマンスのために高価です。 の場合、単純な関数呼び出しよりも簡単に100倍の高価な の例があります。 (マーク「Tarquin」ウィルトン・ジョーンズ)

あなたはStackOverflowの上の検索を使用した場合、あなたはthis questionウィッヒはそのことについては非常に良いと詳細な情報を与えることを発見したでしょう。

EDIT:マーティンのようなが時々new Function -constructorは素晴らしいことですが、以下のコメントの一つで述べています。いくつかの例を一覧表示する:

をしかし:ことはあなたnew Functionを使用できる例は99%で、それは悪いですアイデア - つまり、ある種の「ダイナミックなバーチャル」を持たないような機能を定義するには、コードをスピードアップしてを避けるために、常に「通常の」関数構文を使用する必要がありますのような機能はnew Functionです。

+0

しかし、新しい機能はさらに高速に実行されます!私は何を見ますか? – Dan

+0

テストを実行すると、 'function(){}'の '' 10,841,858/fastest 'と' new Function'の '75,310/99%slower"が得られます。 – oezi

+1

「新しい機能」を使用することは悪い習慣ではありません。必要なときに使用するのは素晴らしいツールです。必要がないときに使用する人は悪い練習です。 「新しい機能」を使用することは悪い習慣であると言うのは、運転中に他の人を走らせる人がいるため、「車を運転することは悪い習慣です」というようなものです。つまり、新しい機能は通常の機能よりも遅く、いつものようにストーリーの終わりになります。 –

関連する問題