1.避免使用同步代码:

// 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地址

2.关闭sockect池:

  nodejs的http客户端会自动的使用sockect池,默认情况下,每一台主机限制你最多使用5个sockect连接,sockect重用能保持很多的资源能够在一定范围内重用,如果你想控制从相同主机取数据的大量请求,这会有很多的瓶颈。在这种情况下,一个很好的办法是提高maxSockets 的值或者是彻底的关闭sockect池

var http = require('http');
var options = {.....};
options.agent = false;
var req = http.request(options)

code的github 地址

3.不要使用nodejs 做静态资源存储

4.在客户端渲染页面

5.使用gzip压缩

6.并行

  试着去处理你的所有阻碍操作,也就是说,并行请求你的远程服务,数据库调用,文件访问,这个将会减少潜在的最慢的请求,而不是所有的在一个队列中的总和时间,为了保持比较好的控制回调和错误信息,我建议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

翻译--Blazing fast node.js: 10 performance tips from LinkedIn Mobile的更多相关文章

  1. Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js 10.x

    运行Reac项目报: Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js ...

  2. 深入浅出Node.js (10) - 测试

    10.1 单元测试 10.1.1 单元测试的意义 10.1.2 单元测试介绍 10.1.3 工程化与自动化 10.1.4 小结 10.2 性能测试 10.2.1 基准测试 10.2.2 压力测试 10 ...

  3. Node.js v0.10.31API手工-DNS

    原版的API品种,这是从以前的翻译和翻译风格不同 Node.js v0.10.31API手冊-文件夹 DNS 使用 require('dns') 引入此模块. dns 模块中的全部方法都使用了 C-A ...

  4. 定时器setTimeout()和Node.js的Event Loop

    一.定时器 setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行.它在"任务队列"的尾部添加一个事件,因此要等到同步任务和 ...

  5. node.js中的框架

    node.js中的框架 载自: http://nodeframework.com/ MVC frameworks Sinatra-like These frameworks offer rich co ...

  6. iKcamp新书上市《Koa与Node.js开发实战》

    内容摘要 Node.js 10已经进入LTS时代!其应用场景已经从脚手架.辅助前端开发(如SSR.PWA等)扩展到API中间层.代理层及专业的后端开发.Node.js在企业Web开发领域也日渐成熟,无 ...

  7. Node.js 指南(迁移到安全的Buffer构造函数)

    迁移到安全的Buffer构造函数 移植到Buffer.from()/Buffer.alloc() API. 概述 本指南介绍了如何迁移到安全的Buffer构造函数方法,迁移修复了以下弃用警告: 由于安 ...

  8. linux下安装node.js时npm无法使用

    安装node.js 10.15.1版本时,安装完在node的安装目录下执行./node -v查看node版本,成功则表示node已安装成功 [root@localhost bin]# ./node - ...

  9. (翻译)《Hands-on Node.js》—— Introduction

    今天开始会和大熊君{{bb}}一起着手翻译node的系列外文书籍,大熊负责翻译<Node.js IN ACTION>一书,而我暂时负责翻译这本<Hands-on Node.js> ...

随机推荐

  1. Java 线程池的原理与实现

    最近在学习线程池.内存控制等关于提高程序运行性能方面的编程技术,在网上看到有一哥们写得不错,故和大家一起分享. 建议:在阅读本文前,先理一理同步的知识,特别是syncronized同步关键字的用法.关 ...

  2. linux用户、组管理及权限(一)

    一.用户管理 1.为什么需要用户 1)计算机及网络资源的合理分配  2)可以控制用户访问系统的权限.3)身份认证 4) 进程 以某个用户的身份来运行 2.用户分类 用户的角色是通过UID(用户ID)来 ...

  3. 获得select下拉框的值

    html -------------------------------------------------------------------------------------- <sele ...

  4. c# XML序列化与反序列化 属性字段标识

    序列化对象 public class People { [XmlAttribute("NAME")] public string Name { set; get; } [XmlAt ...

  5. [leetcode 17]Letter Combinations of a Phone Number

    1 题目: Given a digit string, return all possible letter combinations that the number could represent. ...

  6. Chrome以https访问gitlab的问题:Your connection is not private

    在Chrome中以https访问自己搭建的gitlab站点时经常出现下面的错误: Attackers might be trying to steal your information from xx ...

  7. node-webkit教程(15)当图片加载失败的时候

    在node-webkit教程(14)禁用缓存中,简单讲了当前禁用缓存的几种方法. 在实际开发过程中,我遇到了一个因为缓存引起的诡异的问题.应用场景如下: 在一个编辑器里,不停的向画布上添加svg或者其 ...

  8. 微软BI 之SSIS 系列 - 再谈Lookup 缓存

    开篇介绍 关于 Lookup 的缓存其实在之前的一篇文章中已经提到了 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache ...

  9. BugTracker 加入发Mail的功能

    BugTracker部署好之后,发现增加bug不能mail提醒.于是补上这个功能记录在此,方法是次要的,主要是找到地方.需要3步.吐槽下Asp的代码风格看的真心蛋疼.... 一.发送mail(主要是找 ...

  10. 年终知识分享——UML、设计模式、设计原则

                                                                                                        ...