RxJSの他の四つの実現方式(四)――最高性能のライブラリ(続)

6439 ワード

前の篇RxJSの別の四つの実現方式(三)に続きます.
前の記事では、この最高性能ライブラリの実現方法を示しました.この性能向上の秘密を紹介します.
まず、なぜ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を実行しました.大量の関数コールを見ました.これらはすべて多くのクローズドの矢印関数を作成したからです.
以上は単に性能を見る方法を紹介しました.実際に探索する過程で、大量の模倣と試みを伴って、最後に以下の点をまとめました.
  • プロトタイプチェーンの関数を呼び出すよりも匿名関数を起動するのが遅い
  • 匿名関数呼び出しによりゴミ回収が発生し、GC占有CPU
  • superキーワードの呼び出しが遅いです.
  • 読み書き一時変数は読み書き対象属性より遅いです.
  • プロトタイプをカバーする方法は、プロトタイプに直接アクセスする方法よりも遅くなります.
  • は、コンストラクタの中の賦値の順序に注意して、主にV 8エンジンの下の処理に関係しています.例えば、クイックオブジェクト(C++クラス)、また、GC、グローバル変数とクラス定義(つまり)が簡単にGCに定義されないようにしています.最後にrx 4 rx-fastの最高性能ライブラリの表現を見てみます.43.3 msに達しました.しかし、CPUの占める割合はきわめて少なくなりました.(未完次号)