簡體   English   中英

JavaScript:遍歷日期

[英]JavaScript: Iterating over dates

在某些應用程序中,我需要產生指定范圍內的日期數組。 初始方法存在一個主要的性能問題:

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);

要點是Date是一個復雜的對象,它的比較需要花費大量時間。 最好調用getTime()來獲取基本數字值並進行比較,因為方法調用的開銷小於比較操作所需的時間。

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

這個運行的比最初的代碼快3個倍! 但是,讓我們看看這里還有什么可以做的。

針對Internet Explorer問題的Javascript優化,提出了一些有關性能注意事項的一般建議。

優化性能的一種常用方法是在for循環中緩存“ max”值。

他們說訪問數組的length屬性需要一些時間,應該在循環初始化程序中進行一次。 在我們的例子中,我們在每次循環傳遞時都調用to.getTime() 我不太確定,但是我猜它比訪問對象屬性更耗時。

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

這是jsPerf測試的圖表:

jsPerf Browserscope圖表

您可以看到,緩存to.getTime()值對Chrome瀏覽器沒有任何影響,但是對於Internet Explorer來說似乎是合理的。 我對瀏覽器的內部了解不多,但是我認為原因是引擎特定的優化是自動完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM