1.避免使用同步代码:javascript
// Good: write files asynchronously fs.writeFile('message.txt', 'Hello Node', function (err) { console.log("It's saved and the server remains responsive!"); }); // BAD: write files synchronously fs.writeFileSync('message.txt', 'Hello Node'); console.log("It's saved, but you just blocked ALL requests!");
code 的github地址java
2.关闭sockect池:node
nodejs的http客户端会自动的使用sockect池,默认状况下,每一台主机限制你最多使用5个sockect链接,sockect重用能保持不少的资源可以在必定范围内重用,若是你想控制从相同主机取数据的大量请求,这会有不少的瓶颈。在这种状况下,一个很好的办法是提升maxSockets 的值或者是完全的关闭sockect池git
var http = require('http'); var options = {.....}; options.agent = false; var req = http.request(options)
code的github 地址github
3.不要使用nodejs 作静态资源存储数据库
4.在客户端渲染页面express
5.使用gzip压缩session
6.并行app
试着去处理你的全部阻碍操做,也就是说,并行请求你的远程服务,数据库调用,文件访问,这个将会减小潜在的最慢的请求,而不是全部的在一个队列中的总和时间,为了保持比较好的控制回调和错误信息,我建议step 框架去作工做流控制框架
7.session 空闲
LinkedIn mobile 使用express 框架控制请求和响应,不少的express 例子中都包含了以下的配置
app.use(express.session({ secret: "keyboard cat" }));
通常地,session 数据是存储在内存中,这个将会致使系统开销,特别是有不少的用户组,固然你也可使用外部的session 存储,好比说MongoDB or Redis,可是这样作的话,就会致使远程请求session 数据的系统开销。固然,若是可能,最好的选项是不在服务端存储session数据。在express 框架中不要包含上述配置你将获得更好的性能。
8.使用二进制模块
若是可能的话,尽可能使用二进制模块,而不使用javascript 库,例如:当咱们使用SHA模块转换的话,咱们将看到有更好的性能。
// Use built in or binary modules var crypto = require('crypto'); var hash = crypto.createHmac("sha1",key).update(signatureBase).digest("base64");
9.使用标准的V8而不是使用客户端的库
10.保持你的代码小而简洁
时不时的问问本身这几个问题:
1.我真的须要这个模块吗?
2.我为何要使用这个框架?
3.这个系统开销值得吗?
4.我是否能够用一个更简单的方式去实现这个?
翻译文章地址:http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile