前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxJS的另外四种实现方式(四)——性能最高的库(续)

RxJS的另外四种实现方式(四)——性能最高的库(续)

作者头像
我不是码神
发布2022-07-28 14:21:03
4630
发布2022-07-28 14:21:03
举报
文章被收录于专栏:流媒体技术

接上一篇

李宇翔:RxJS的另外四种实现方式(三)——性能最高的库

上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。

首先,为了弄清楚Most库究竟为何如此快,我必须借助其他工具。比如chrome 的devtools性能分析,刚开始我运行node --inspect来启动性能测试代码,然后打开chrome浏览器,在chrome://inspect里面打开nodejs调试工具,不过每次这样操作比较繁琐,后来直接用Nodejs提供的inspector模块来生成cpuprofile文件。

代码语言:javascript
复制
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.3ms,下面的操作符函数占用cpu的情况如图。

接下来我们看一下rx4rx-lite,我们的最小代码库的执行情况:

执行了88ms 我们看到了大量的函数调用,这些都是因为创建了很多闭包的箭头函数。

以上只是说介绍了如何去看性能的方法,实际探索过程中,伴随的是大量的模仿和尝试,最后总结出以下几点: 1. 调用匿名函数比调用原型链中的函数要慢 2. 匿名函数调用会产生垃圾回收,GC占用CPU 3. super关键字调用很慢很慢 4. 读写临时变量比读写对象属性要慢 5. 覆盖原型的方法,比直接访问原型的方法要慢 6. 注意构造函数里面的赋值顺序

产生以上原因主要就是V8引擎在底层的处理有关,比如快速对象(C++类),还有就是尽量避免GC,全局变量和类定义(一回事)不会被轻易GC 最后我们看一下rx4rx-fast 我们的最高性能库的表现:

达到了43.3ms,虽然函数调用较深,但所占CPU极少了。 (未完待续)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档