【React Native】console.time の代わりに使える performance

2022/08/20に公開

React Native (0.63時点) では、console.time を使用することができない。

ポイント

  • console.time を使用することができない。
  • 代わりに performance というAPIが利用できる。
  • 別に Date でも代用できる。

performance

https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

var t0 = performance.now()
    
doSomething()   // <---- measured code goes between t0 and t1
    
var t1 = performance.now()
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.")

単に、処理実行の起点と終点の時刻の差を得るだけなので、Dateオブジェクトを使用してもほとんど同じ結果が得られるはず。

Dateとの違い

performance.now()が返す値は常に一定の割合で増加し、システムクロック(手動で調整したり、NTPなどのソフトウェアで歪んだりする場合があります)とは無関係です。そうでなければ、performance.timing.navigationStart + performance.now()はDate.now()とほぼ等しくなる。

https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

Dateオブジェクトを利用する場合は、外部的な要因に影響を受ける場合があるため、performanceの方がパフォーマンス計測に関してはより信頼できそう。

サンプル

export const Performance = {
  time1: undefined,
  time2: undefined,
  start: function () {
    this.time1 = performance.now();
  },
  end: function () {
    if (this.time1 === undefined) {
      console.log('Timer has not started yet');
      return;
    }

    this.time2 = performance.now();
    console.log(this.time2! - this.time1! + ' milliseconds.');
    this.time1 = undefined;
    this.time2 = undefined;
  },
};
{
  Performance.start();
  doSomething(); // 計測したい処理 
  Performance.end();
}

// "0.87654321 milliseconds."

参考

https://stackoverflow.com/questions/46255005/how-to-time-a-function-in-react-native

Discussion