作っているWebサービスの性能改善のため、
どれくらい時間がかかるかを計測したいと思ったときの備忘録。
この記事をみると、デコレータでできる感じだったのでためしてみた。
こんな感じで時間を測りたい関数に@measureLog
をつけるだけでログに表示してくれるように。
@measureLog function foo() { //... }
時間を計測するデコレータ
デコレータの本体はこんな感じ。
export function measureLog(target: any, propKey: string, descriptor: PropertyDescriptor) { // 対象の関数を取得 const original = descriptor.value; // 計測処理を含めた関数をラップ descriptor.value = function() { const key = `measureLog_${target.constructor.name}#${propKey}`; // 計測開始 console.time(key); // リフレクションで対象関数を実行 const ret = Reflect.apply(original, this, arguments); // 対象関数の返り値がPromiseなら、結果が帰ってくるまで待つ if (ret instanceof Promise) { return ret.then((ret) => { console.timeEnd(key); return ret; }); } else { console.timeEnd(key); } return ret; }; }
以上!! デコレータ便利...(´ω`)