RxJSの他の四つの実現方式(四)――最高性能のライブラリ(続)
6439 ワード
前の篇RxJSの別の四つの実現方式(三)に続きます.
前の記事では、この最高性能ライブラリの実現方法を示しました.この性能向上の秘密を紹介します.
まず、なぜMostライブラリがこんなに早くなったのかを明らかにするためには、他のものを借りる必要があります.例えば、chromeのdevtoolsの性能分析は、node-inspectを実行して性能テストコードを起動し、chromeブラウザを開いて、chrome://inspect中はnodejsデバッグツールを開けますが、毎回このように操作するのが煩雑です.後にNodejsから提供されたinspectorモジュールでcpprofileファイルを生成します.
次にrx 4 rx-liteを見てみます.私たちの最小コードライブラリの実行状況:88 msを実行しました.大量の関数コールを見ました.これらはすべて多くのクローズドの矢印関数を作成したからです.
以上は単に性能を見る方法を紹介しました.実際に探索する過程で、大量の模倣と試みを伴って、最後に以下の点をまとめました.プロトタイプチェーンの関数を呼び出すよりも匿名関数を起動するのが遅い 匿名関数呼び出しによりゴミ回収が発生し、GC占有CPU superキーワードの呼び出しが遅いです. 読み書き一時変数は読み書き対象属性より遅いです. プロトタイプをカバーする方法は、プロトタイプに直接アクセスする方法よりも遅くなります. は、コンストラクタの中の賦値の順序に注意して、主にV 8エンジンの下の処理に関係しています.例えば、クイックオブジェクト(C++クラス)、また、GC、グローバル変数とクラス定義(つまり)が簡単にGCに定義されないようにしています.最後にrx 4 rx-fastの最高性能ライブラリの表現を見てみます.43.3 msに達しました.しかし、CPUの占める割合はきわめて少なくなりました.(未完次号)
前の記事では、この最高性能ライブラリの実現方法を示しました.この性能向上の秘密を紹介します.
まず、なぜMostライブラリがこんなに早くなったのかを明らかにするためには、他のものを借りる必要があります.例えば、chromeのdevtoolsの性能分析は、node-inspectを実行して性能テストコードを起動し、chromeブラウザを開いて、chrome://inspect中はnodejsデバッグツールを開けますが、毎回このように操作するのが煩雑です.後にNodejsから提供されたinspectorモジュールでcpprofileファイルを生成します.
const inspector = require('inspector');
const fs = require('fs');
const session = new inspector.Session();
session.connect();
function logStart() {
console.log(this.name);
console.log('-----------------------------------------------');
session.post('Profiler.enable', () => {
session.post('Profiler.start', () => {
// invoke business logic under measurement here...
});
});
}
function logComplete() {
console.log('-----------------------------------------------');
// some time later...
session.post('Profiler.stop', (err, {
profile
}) => {
// write profile to disk, upload, etc.
if (!err) {
fs.writeFileSync('./profile.cpuprofile', JSON.stringify(profile));
}
});
}
各ライブラリが占めるCPUの状況を見ることができます.まず、Mostライブラリの状況を見てみます.Mostライブラリの中に時間軸があります.そして、タスクを時間軸に割り当てて実行しています.ですから、taskのキーワードはたくさん見られます.もちろん、現在の性能テストは時間軸の役割を果たしていません.今回の性能収集は57.3 msを実行しています.下のオペレータ関数がcpuを占有している場合は図のようです.次にrx 4 rx-liteを見てみます.私たちの最小コードライブラリの実行状況:88 msを実行しました.大量の関数コールを見ました.これらはすべて多くのクローズドの矢印関数を作成したからです.
以上は単に性能を見る方法を紹介しました.実際に探索する過程で、大量の模倣と試みを伴って、最後に以下の点をまとめました.