位置: 编程技术 - 正文

nodejs的10个性能优化技巧(nodejs性能对比)

发布时间:2024-02-27

推荐整理分享nodejs的10个性能优化技巧(nodejs性能对比),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs 新特性,nodejs总结,node js特点,nodejs性能支撑多少用户,nodejs性能支撑多少用户,nodejs 性能,nodejs功能有哪些,nodejs的典型特点,内容如对您有帮助,希望把文章链接给更多的朋友!

下面是我们使用Node.js时遵循的个性能规则:

1. 避免使用同步代码

在设计上,Node.js是单线程的。为了能让一个单线程处理许多并发的请求,你可以永远不要让线程等待阻塞,同步或长时间运行的操作。Node.js的一个显著特征是:它从上到下的设计和实现都是为了实现异步。这让它非常适合用于事件型程序。

不幸的是,还是有可能会发生同步/阻塞的调用。例如,许多文件系统操作同时拥有同步和异步的版本,比如writeFile和writeFileSync。即使你用代码来控制同步方法,但还是有可能不注意地用到阻塞调用的外部函数库。当你这么做时,对性能的影响是极大的。

我们的初始化log在实现时无意地包含了一个同步调用来将内容写入磁盘。如果我们不做性能测试那么就会很容易忽略这个问题。当以developer box中一个node.js实例来作为标准测试,这个同步调用将导致性能从每秒上千次的请求降至只有几十个。

2.关闭套接字池

Node.js的http客户端会自动地使用套接字池:默认地,它会限制每台主机只能有5个套接字。虽然套接字的重复使用可能会让资源的增加在控制之下,但如果你需要处理许多数据来自于同一主机的并发请求时,将会导致一系列的瓶颈。在这种情况下,增大maxSockets 的值或关闭套接字池是个好主意:

3.不要让静态资源使用Node.js

对于css和图片等静态资源,用标准的WebServer而不是Node.js。例如,领英移动使用的是nginx。我们同时还利用内容传递网络(CDNs),它能将世界范围内的静态资拷贝到服务器上。这有两个好处:(1)能减少我们node.js服务器的负载量(2)CDNs可以让静态内容在离用户较近的服务器上传递,以此来减少等待时间。

4.在客户端渲染

让我们快速比较一下服务器渲染和客户端渲染的区别。如果我们用node.js在服务器端渲染,对于每个请求我们都会回送像下面这样的HTML页面:

请注意观察这个页面所有的内容,除了用户的名字,其余都是静态内容:对于每个用户和页面重载内容都是一样的。因此更有效的作法是让Node.js仅以JSON形式返回页面需要的动态内容。

{"name": "John"}页面的其余部分—所有静态的HTML标记-能放在JavaScript模板中(比如underscore.js模板):

性能的提升来自于这些地方:如第三点所说,静态JavaScript模板能通过webserver(比如nginx)在服务器端提供,或者用更好的CDN来实现。此外,JavaScript模板能缓存在浏览器中或存储在本地,所有初始页面加载以后,唯一需要发送给客户端的数据就是JSON,这将是最有效果的。这个方法能极大性地减少CPU,IO,和Node.js的负载量。

5.使用gzip

nodejs的10个性能优化技巧(nodejs性能对比)

许多服务器和客户端支持gzip来压缩请求和应答。无论是应答客户端还是向远程服务器发送请求,请确保充分使用它。

6.并行化

试着让你所有的阻塞操作-向远程服务发送请求,DB调用,文件系统访问并行化。这将能减少最慢的阻塞操作的等待时间,而不是所有阻塞操作的等待时间。为了保持回调和错误处理的干净,我们使用Step来控制流量。

7.Session自由化

领英移动使用Express框架来管理请求/应答周期。许多express的例子都包含如下的配置:

app.use(express.session({ secret: "keyboard cat" }));默认地,session数据是存储在内存中的,这会给服务器增加巨大的开销,特别是随着用户量的增长。你可以使用一个外部session存储,比如MongoDB或Redis,不过每一个请求将会导致远程调用来取得session数据的开销。在可能的情况下,最好的选择就是在服务器端存储所有的无状态数据。通过不包含上述express配置让session自由化,你会看到更好的性能。

8.使用二进制模块

如果可能,用二进制模块取代JavaScript模块。例如,当我们从用JavaScript写的SHA模块转换到Node.js的编译版本,我们会看到性能的一个大跃进:

9.用标准的 V8 JavaScript 取代客户端库

许多JavaScript库都是为了在web浏览器上使用而创建的,因为在JavaScript环境不同时:比如,一些浏览器支持forEach,map和reduce这样的函数,但有些浏览器不支持。因此客户端库通常用许多低效的代码来克服浏览器的差异。另一方面,在Node.js中,你能确切地知道哪些JavaScript方法是有效的:V8 JavaScript引擎支撑Node.js实现ECMA-第五版中指定的ECMAScript。直接用标准的V8 JavaScript函数替代客户端库,你会发现性能得到显著的提高。

.让你的代码保持小且轻

使用移动设备会让访问速度慢且延迟高,这告诉我们要让我们的代码保持小且轻。对于服务器代码也保持同样的理念。偶尔回头看看你的决定且问自己像这样的问题:“我们真的需要这个模块吗?”,“我们为什么用这个框架,它的开销值得我们使用吗?”,“我们能用简便的方法实现它吗?”。小轻且的代码通常更高效、快速。

试试看

我们很努力地让自己的移动应用变得快速。在IPhone应用,Android应用和HTML5移动版本这些平台上尝试一下,让我们知道自己做得怎么样。

抛弃Nginx使用nodejs做反向代理服务器 时下不少场景,都是申请一个VPS主机来托管运行Web项目的,小弟我也不例外,购买了一个小型的WinVPS使用着。在使用的过程中,面临一个问题,就是

Express.JS使用详解 安装了node(下载)之后,在你的机器上创建一个目录,开始你的第一个应用程序。$mkdirhello-world在这个目录中你将定义应用程序包,这和任何其他node的包没有

使用nodejs、Python写的一个简易HTTP静态文件服务器 日常开发过程中,我们经常需要修改一些放在CDN上的静态文件(如JavaScript、CSS、HTML文件等),这个过程中,我们希望能有一种方式将线上CDN的目录映

标签: nodejs性能对比

本文链接地址:https://www.jiuchutong.com/biancheng/374170.html 转载请保留说明!

上一篇:提高NodeJS中SSL服务的性能(node.js ssh)

下一篇:抛弃Nginx使用nodejs做反向代理服务器(nginx优雅退出)

  • 增值税进项发票怎么做账
  • 城建税的计税依据是增值税和消费税的和吗
  • 金税四期怎么监控应收账款
  • 社保年检申报错误怎么办
  • 物流进项税
  • 分公司缴税企业所得税
  • 会计忘记申报税款会有什么影响
  • 小规模纳税人每季度报税清盘
  • 个人厂房租赁税率是多少
  • 属于期间费用抵减项目
  • 哪些企业可以享受加计抵减政策
  • 销售退回 账务处理
  • 长期待摊费用摊出来钱去哪里了
  • 收购烟叶委托加工烟丝组成计税价格
  • 纳税人和征税对象的区别
  • 一般纳税人的工资可以抵扣吗
  • 实收资本印花税最新政策2023年
  • 经营性租入的固定资产需要计提折旧吗
  • 小规模印花税怎么报
  • 中央空调使用费怎么开发票
  • 不确定金额的应收账款
  • 个人将房产无偿赠与他人应交个人所得税吗
  • 工资扣税标准计算方法
  • 你需要来自system的权限怎么解决
  • 跨月冲红发票需收回原发票
  • 出纳现金管理的目标与方法
  • 公司收回货款会计分录
  • 笔记本cpu天梯图苹果
  • 如何在qq好友旁边打字
  • PHP:spl_autoload_register()的用法_spl函数
  • 支付厂房租金计入什么科目
  • 大群的芒基蝠鲼跃出水面,墨西哥加利福尼亚湾 (© Mark Carwardine/Minden Pictures)
  • php 字节
  • thinkphp d
  • 小规模纳税人报税期是哪几个月
  • 建筑劳务公司的法人代表有什么责任
  • 公司法人和股东哪个承担的责任大
  • 维保服务的税率是多少
  • 购买完服务器之后要怎么做
  • 10倍理论
  • php错误和异常
  • pytest unittest
  • 社保可以直接计入费用吗
  • 应交税费的账务处理一般纳税人
  • 低值易耗品可以报废吗
  • 广告类的公司
  • 固定资产台账具体做什么
  • 代销商品怎么开票
  • 其他应收款贷方余额怎么调整
  • 凭证扣除 28号
  • 以下各项不属于肝郁气滞证表现的是
  • 管理费用贷方有余额怎么处理
  • 投资性房地产公允价值变动借贷方向
  • 开来发票没有付款可以进入费用吗?
  • 收到专票未抵扣能购买方开红字发票吗
  • 一年不到
  • 盈余公积必须提折旧吗
  • 服务器 安装win10
  • 简述linux系统有什么显著特点
  • win10怎么设置开机启动软件
  • linux awk排序
  • win7应用程序无法正常启动
  • win8文件夹选项在哪
  • iis安装步骤 windows server 2008
  • shell脚本用法
  • opencv轻松入门
  • replace函数怎么替换
  • jquery页面跳转的方法
  • 批量安装windows7补丁
  • python标准库os中的方法
  • centos6安装python
  • android的edittext在哪
  • js鼠标滚轮缩放
  • js 进阶
  • jquery实现轮播图步骤
  • 1、Android Studio创建android项目
  • android中常用的布局是
  • 新都税务局咨询电话
  • 自来水公司服务热线电话
  • 辽宁朝阳丧葬费标准2022
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号