オブジェクトの配列を、各オブジェクトが文字列で持っている日付けでソートしようとし、Date.parse()
を使って実装した。しかしもしかするとnew Date().getTime()
の方が速いのではないかと調べていたら色々あった。結論としては今はDate.parse()
がだいたい速いようだ。
以下は確認に使ったコードと実行結果だ。ランダムな日付けじゃないと正確な答えは出ないかと思ったがそうでもなかったので、この最初に書いたもので計った。
"use strict";
var i;
var dt = "2016-04-28T19:15:27+09:00";
var parse = "Date.parse(d)";
var gettime = "new Date(d).getTime()";
console.time(parse);
for (i = 0; i < 100000; i++) {
Date.parse(dt);
}
console.timeEnd(parse);
console.time(gettime);
for (i = 0; i < 100000; i++) {
new Date(dt).getTime();
}
console.timeEnd(gettime);
Date.parse(d): 83.232ms new Date(d).getTime(): 102.328ms
Node.js v6系では安定してparse()
の方が速い。
Date.parse(d): 130ms new Date(d).getTime(): 31ms
Node.js v4系、つまり少し古いv8では異様にgetTime()
の方が速い。今のLTS版であるv4.4.3で動かすスクリプトならgetTime()
を使った方が良い……ということになりそうだが、何かのバグに基づいたまずい挙動であることも否めないため、意識しない方が無難だろう。
Date.parse(d): 105.764ms new Date(d).getTime(): 108.520ms
Date.parse(d): 51.39ms new Date(d).getTime(): 75.22ms
Date.parse(d): 79.165ms new Date(d).getTime(): 149.825ms
Date.parse(d): 95.232ms new Date(d).getTime(): 128.391ms
Date.parse(d): 55.51ms new Date(d).getTime(): 89.19ms
Date.parse(d): 81.201ms new Date(d).getTime(): 129.689ms
他の環境でも安定してparse()
の方が速いようだ。Chrome 50だけ良い勝負だが、すぐに消えると考えられるので気にする必要はない。
jsPerfが死んでいて色々面倒だ。JSFiddleに置いたコードでブラウザーでは確認できる。