Panda Noir

JavaScript の限界を究めるブログです。

JavaScriptでパフォーマンス測るならDateではなくperformance.now()

全然知られてないperformance.now()。僕もつい最近知りました。恥ずかしい。

performance.now()とは

現在時刻のスタンプを返します。new Date()と違うのは1000分の1ミリ秒まで計測できる点です。

例えばこんなことができます。

var t0 = performance.now();
someFunc();
var t1 = performance.now();
console.log(t1 - t0);

普通なら10000回関数を実行して何秒なのかを計りますが、performance.now()は1000分の1ミリ秒まで計れるので必要ありません。

メリット

V8なんかでは10000回もループを回すと内部で最適化をしてしまい、実は関数本体のパフォーマンスが計れてないことがあります。

performance.now()なら関数実行が1回なので最適化なしの本当のパフォーマンスを計れます。

注意点

performance.now()は関数を1回しか呼ばないので1回データをとって終わり、ではなく数回データをとって平均をとる、中央値をとるなどする必要があります。

それと、performanceはデフォルトで定義されたオブジェクトです。上書きすると何が起きるかわかりません。知らないと使いそうですので注意しましょう。

終わりに

使えるときはバンバン使って脱Dateしましょう。