网站首页 > 开源技术 正文
下面我介绍一下这个性能提升的秘密。
首先,为了弄清楚Most库究竟为何如此快,我必须借助其他工具。比如chrome 的devtools性能分析,刚开始我运行node --inspect来启动性能测试代码,然后打开chrome浏览器,在chrome://inspect里面打开nodejs调试工具,不过每次这样操作比较繁琐,后来直接用Nodejs提供的inspector模块来生成cpuprofile文件。
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 我们看到了大量的函数调用,这些都是因为创建了很多闭包的箭头函数。
以上只是说介绍了如何去看性能的方法,实际探索过程中,伴随的是大量的模仿和尝试,最后总结出以下几点:
- 调用匿名函数比调用原型链中的函数要慢
- 匿名函数调用会产生垃圾回收,GC占用CPU
- super关键字调用很慢很慢
- 读写临时变量比读写对象属性要慢
- 覆盖原型的方法,比直接访问原型的方法要慢
- 注意构造函数里面的赋值顺序
产生以上原因主要就是V8引擎在底层的处理有关,比如快速对象(C++类),还有就是尽量避免GC,全局变量和类定义(一回事)不会被轻易GC 最后我们看一下rx4rx-fast 我们的最高性能库的表现:
达到了43.3ms,虽然函数调用较深,但所占CPU极少了。 (未完待续)
- 上一篇: 企业信息化开发基础平台 JeePlatform
- 下一篇: 鸿蒙上实现多人聊天功能(鸿蒙怎么多屏协同)
猜你喜欢
- 2024-10-07 第68节 Ajax-Web前端开发之JavaScript-零点程序员-王唯
- 2024-10-07 在 Flask 中处理表单和用户输入(魔兽世界收到名字叫表单处理提醒的私信)
- 2024-10-07 layer全选反选,弹窗+表单+验证组合代码实例
- 2024-10-07 Typora图片自动上传七牛云图床插件整合
- 2024-10-07 web前端程序员,面试必备9种跨域产生原因和解决方案,附资料
- 2024-10-07 Axios Promise 的 HTTP 库使用详细介绍
- 2024-10-07 Vu3+Ts+Vite2+Pinia 搭建开发脚手架
- 2024-10-07 axios学习教程全攻略(axios入门)
- 2024-10-07 JAVA全栈CMS系统vue图片/视频上传组件,多图上传及删除功能11
- 2024-10-07 手把手详细教程:程序猿必备调试工具postman
你 发表评论:
欢迎- 最近发表
-
- 后端服务太慢?试试这 7 招(后端 服务端 区别)
- 做一个适合二次开发的低代码平台,把程序员从curd中解脱出来-1
- Caffeine缓存 最快缓存 内存缓存(caffeine缓存使用)
- Java性能优化的10大策略(java性能调优从哪几个方面入手)
- New Balance M576PGT 全新配色设计
- x-cmd pkg | qrencode - 二维码生成工具
- 平和精英抽奖概率是多少 平和精英抽奖物品一览
- x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)
- 漫威官方App中文版上线:全站漫画限时免费
- macOS Monterey 12.7.4 (21H1123) 正式版发布,ISO、IPSW、PKG 下载
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)