最近想监控一下Nodejs的性能。记录分析Log太麻烦,最简单的方式是记录每个HTTP请求的处理时间,直接在HTTP Response Header中返回。

记录HTTP请求的时间很简单,就是收到请求记一个时间戳,响应请求的时候再记一个时间戳,两个时间戳之差就是处理时间。

但是,res.send()代码遍布各个js文件,总不能把每个URL处理函数都改一遍吧。

正确的思路是用middleware实现。但是Nodejs没有任何拦截res.send()的方法,怎么破?

其实只要稍微转换一下思路,放弃传统的OOP方式,以函数对象看待res.send(),我们就可以先保存原始的处理函数res.send,再用自己的处理函数替换res.send:

app.use(function (req, res, next) {

// 记录start time:

var exec_start_at = Date.now();

// 保存原始处理函数:

var _send = res.send;

// 绑定我们自己的处理函数:

res.send = function () {

// 发送Header:

res.set('X-Execution-Time', String(Date.now() - exec_start_at));

// 调用原始处理函数:

return _send.apply(res, arguments);

};

next();

});

只用了几行代码,就把时间戳搞定了。

对于res.render()方法不需要处理,因为res.render()内部调用了res.send()。

调用apply()函数时,传入res对象很重要,否则原始的处理函数的this指向undefined直接导致出错。

实测首页响应时间9毫秒:

nodejs python性能_监控Nodejs的性能相关推荐

  1. java jpa性能_[Java Performance] 数据库性能最佳实践 - JPA和读写优化

    数据库性能最佳实践 当应用须要连接数据库时.那么应用的性能就可能收到数据库性能的影响. 比方当数据库的I/O能力存在限制,或者因缺失了索引而导致运行的SQL语句须要对整张表进行遍历.对于这些问题.只相 ...

  2. python虚拟cpu性能_基于Tensorflow:CPU性能分析

    iostat iostat用于输出CPU和磁盘I/O相关的统计信息. 命令格式: 1)显示所有设备负载情况 指令: iostat -m 2 5 cpu属性值说明: %user:CPU处在用户模式下的时 ...

  3. nodejs爬虫与python爬虫_【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

    写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园.搞不好编辑看到了就把我的账号给封了:). 言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 ph ...

  4. nodejs初学者书籍_表示nodejs的后继者

    nodejs初学者书籍 If you observe carefully, DENO is an anagram of the word NODE. But probably much more th ...

  5. mysql 树莓派3 性能_树莓派 3b 的性能怎么样?

    树莓派不是拼性能的设备,拼的是生态+低功耗+低价格. 3b的性能其实也挺不错了,不过还是不适合跑密集计算和图形计算. 再就是树莓派3b的网卡基于usb2.0的,所以带宽很低(网卡),所以不适合做多媒体 ...

  6. redis value多大会影响性能_事务对MySQL性能有什么影响?有无索引查找对其影响有多大?...

    推荐学习 阿里P8MySQL,基础/索引/锁/日志/调优都不误,一锅深扒端给你 抖音后端123面开挂,全靠这份啃了58天的「Java进阶核心知识集」 肝了30天,整出这份[分布式宝典:限流+缓存+通讯 ...

  7. nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例

    本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 依赖模块: 1. mysqlnpm install mysq ...

  8. nodejs安装不好_【nodejs安装错误2503】nodejs安装2503_nodejs 2503-系统城

    2017-12-27 14:50:11 浏览量:959 最近,一位windows10系统用户反馈自己在电脑中安装nodejs时,突然遇到提示错误代码2503,因为错误提示是英文界面所有不知道到底是那里 ...

  9. mysql 主从复制 性能_zabbix监控mysql各项性能,主从复制

    ###################################################### 监控mysql(默认监控模板不能用,再agentd.conf开启自定义key,自己编写脚本 ...

  10. java substring 性能_《Java程序性能优化》subString()方法的内存泄露

    String的构造 首先了解下String的构造,String内部使用char [] value 来存储字符. 需要注意 offset和count在1.7已经没有了. /** The value is ...

最新文章

  1. java 十二星座数据下载_十二星座
  2. 推荐升级版PDF在线转Word转换器
  3. 【机器学习基础】理解关联规则算法
  4. Android Studio 找不到EventBus/ButterKnife等第三方包解决方案
  5. JAVA运行程序代码段
  6. 什么为java运行时的环境_什么是JRE?Java运行时环境简介(一)
  7. ORACLE查看某个表空间里有哪些表
  8. linq to sql取出随机记录/多表查询/将查询出的结果生成xml
  9. 三菱fx2n-2ad编程实例_三菱PLC编程实例,PLC控制自动成型机
  10. java 方法注释_Java注释,java方法注释详解
  11. [NSSCTF][羊城杯2020]WEB复现
  12. 音视频技术之《移动直播秒开优化经验》
  13. AI产业快速落地难?破局人来了
  14. 中国电信SIM卡绝杀冷、热钱包,区块链手机还没火就要凉凉?
  15. 文件损坏打不开怎么办?excel文件修复,看看这些解决办法
  16. linux环境下解压rar文件
  17. 【Build】关于-fPIC, -fpic, -fpie, -fPIE的一点理解
  18. 在 Linux 上使用 time 命令优雅的统计程序运行时间
  19. Oracle 数据库 Scott 用户介绍
  20. 刀剑斗神传只显示11个服务器,与官方服务器互通 《刀剑斗神传》电脑版即将上线...

热门文章

  1. 试卷生成系统安装与卸载
  2. 896.Montonic Array - LeetCode
  3. Winfrom开发之动态生成TreeView树形菜单
  4. Spring Cloud各个组件的配套使用
  5. 【译】用CSS实现基线韵律
  6. Android Studio 0.1 gradle home的问题
  7. Android: 一个两点触控的案例
  8. 精通Hibernate类与类关联关系:[三]映射一对多双向自身关联关系
  9. 在Sql的where中使用case进行不同字段筛选|Case的2种使用方法和一种少为人知的用途...
  10. CAngle类 角度转换类 C++