日期:2014-05-16 浏览次数:20346 次
英文原文连接
?
1、避免使用同步的方法
?
nodejs 是基于单线程。为了让单线程能够处理高并发的请求,我们尽量要避免让线程等待,阻塞,同步,和长时间运行某项操作。nodejs 一个显著的特点就是彻头彻尾的异步。这个特性在基于事件驱动的应用上表现的非常的出色。
?
不幸的是在nodejs 中仍然存在可以同步或者阻塞调用方法。例如,许多的文件系统操作既有异步的方法也有同步的方法,像 fs.writeFile 和 fs.writeFileSync。尽管你避免在代码中使用同步的方法,但你引用的外部库中可能包含致使阻塞的方法调用。一旦这种情况出现,将会对性能产生显著的影响。
?
// 正确写法: 异步的写文件fs.writeFile('message.txt', 'Hello Node', function (err) {console.log("It's saved and the server remains responsive!");});// 音响性能的写法: 同步的写文件fs.writeFileSync('message.txt', 'Hello Node');console.log("It's saved, but you just blocked ALL requests!");2、关闭 socket 连接池
nodejs http client 自动使用socket 连接池,默认情况下每个主机将socket per 限制到五个。当socket 被回收重用后资源的增长将会无法控制,特别是你要处理从同一主机发送大量并发请求数据时候将会导致严重的性能瓶颈。这种情况下,最好的解决办法是增加 maxSockets 或者禁用 socket 连接池:
?
var http = require('http');var options = {.....};options.agent = false;var req =