2016-03-22 21 views
0

アプリケーションによっては、指定された範囲内で日付の配列を生成する必要があります。JavaScript:日付の繰り返し

var from = new Date("2016-01-01"); 
var to = new Date("2016-12-31"); 

for (var current = new Date(from); current <= to; current.setDate(current.getDate() + 1); 

答えて

1

主なポイントは、Dateが複雑なオブジェクトであり、それは比較はかなりの時間がかかるということです。最初のアプローチの主要なパフォーマンスの問題がありました。 getTime()を呼び出して、基本的な数値の値を取得して比較することをお勧めします。これは、メソッド呼び出しのオーバーヘッドが比較操作に必要な時間よりも短いためです。

for (
    var current = new Date(from); 
    current.getTime() <= to.getTime(); 
    current.setDate(current.getDate() + 1) 
); 

これは、最初のコードよりも3倍倍高速に動作します!しかし、ここで何ができるのか見てみましょう。

Javascript optimizations for Internet Explorer質問については、パフォーマンスに関する考慮事項がいくつかあります。

パフォーマンスを最適化する一般的な方法の1つは、forループで 'max'値をキャッシュすることです。

アレイのlengthプロパティにアクセスするのには時間がかかり、ループ初期化子で1回行う必要があります。私たちの場合は、すべてのループパスでto.getTime()と呼んでいます。私は絶対にはわかりませんが、オブジェクト属性にアクセスするより時間がかかる操作だと思います。あなたはそのキャッシュto.getTime()値を見ることができます

jsPerf Browserscope Chart

は、Chromeブラウザのための任意の影響を与えていませんが、Internet Explorerのための合理的になります。

for (
    var current = new Date(from), toTime = to.getTime(); 
    current.getTime() <= toTime; 
    current.setDate(current.getDate() + 1) 
); 

はこちらjsPerf testからチャートです。私はブラウザの内部についてはよく分かりませんが、その理由はエンジン固有の最適化が自動的に行われるためです。

関連する問題