Node.js作为后台服务,用户最关心的一个问题就是性能问题。性能问题除了Node.js本身具有的因素而外,他所在的服务所带来的因素也是至关重要的。前文我们介绍的包括事件循环机制在内的逻辑可以认为是他本身的因素,下文我们列举的几个因素就是由于服务器性能所带来的性能问题
因素一:代码逻辑
在Node.js中我们应该保证他的主线程可以顺利执行,所以我们在代码中进行大的数据循环,没有使用数据流;操作一些字符串的处理转化,比如加密解密字符串序列化等,还有操作一些大的视频音频,缩放剪裁等
因素二:网络I/O
同步阻塞 I/O的字面意思是发出网络请求后需要等待返回后,再处理其他计算;
异步非阻塞 I/O就是发起网络 I/O 后,还可以处理其他的计算,这也是为什么 Node.js 在处理网络 I/O 性能较高的原因。
因素三:磁盘I/O
在实际开发过程中,最常见的磁盘 I/O 场景,那就是日志模块,因为日志是需要写文件,从而会有频繁的日志写入。和网络 I/O 相似,磁盘 I/O 也会从侧面的影响机器性能,导致 Node.js 服务性能受影响。
其他:
1内存限制
在 32 位服务器上 Node.js 的内存限制是 0.7 G,而在 64 位服务器上则是 1.4 G,而这个限制主要是因为 Node.js 的垃圾回收线程在超过限制内存时,回收时长循环会大于 1s,从而会影响性能问题。
2句柄限制
句柄可以简单理解为一个 ID 索引,通过这个索引可以访问到其他的资源,比如说文件句柄、网络 I/O 操作句柄等等,而一般服务器句柄都有上限。当 Node.js 没有控制好句柄,比如说无限的打开文件并未关闭,就会出现句柄泄漏问题,而这样会导致服务器异常,从而影响 Node.js 服务。
此文章为6月Day018学习笔记,内容来源于极客时间《Node.js开发实战》,强烈推荐该课程!