[英]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測試的圖表:
您可以看到,緩存to.getTime()
值對Chrome瀏覽器沒有任何影響,但是對於Internet Explorer來說似乎是合理的。 我對瀏覽器的內部了解不多,但是我認為原因是引擎特定的優化是自動完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.