提升 Node.js 应用性能的 5 个技巧
admin
2023-02-14 04:20:03
0

Node.js是全球领先的用JavaScript——世界上最流行的编程语言创建服务器应用程序的工具。提供web服务器和应用服务器的功能,Node.js被认为是各种以微服务为基础的开发和交付的关键工具。

Node.js可以替代或增强Java和.NET用于后端应用程序的开发。

Node.js是单线程的,并且使用非阻塞I / O,允许它扩展并支持数以万计的并行操作。它和NGINX共享这些架构特性,并解决C10K问题——支持超过10000个并发连接——NGINX也可以解决并行操作问题。 Node.js以它的高性能和高开发效率享誉全球。

那么,哪里会出问题呢?

Node.js有一些薄弱环节和漏洞,这些薄弱环节和漏洞会使得基于Node的系统容易出现性能不佳,甚至崩溃的现象。尤其是当基于Node.js的web应用程序碰到访问量高速增长的时候,问题就会出现得更加频繁。

此外,Node.js是用于创建和运行产生核心可变网页内容逻辑的强大工具。但它在服务静态内容——例如图像和JavaScript文件——以及平衡多个服务器上的负载这些方面还没那么强大。

为了最有效地使用Node.js,你需要缓存静态内容,代理和平衡多个应用程序服务器负载,并管理客户端、Node.js和助手——如运行Socket.IO的服务器——之间的端口竞争。 NGINX可用于解决这些问题,从而使得它成为了一个Node.js性能优化的伟大工具。

使用这些技巧可以提高Node.js应用性能:

  1. 实现反向代理服务器
  2. 缓存静态文件
  3. 多服务器的负载均衡
  4. 代理WebSocket连接
  5. 实现SSL / TLS和HTTP / 2

注:Node.js应用性能的快速解决办法是修改你的Node.js配置,以充分利用现代多核服务器的优势。你也可以读一读另一篇关于如何让Node.js生成单独子进程的文章。

1.实现反向代理服务器

我们在NGINX.Inc的时候,如果看到有应用程序服务器直接接触传入的访问流量,用于高性能网站核心的时候,总会不自觉地有点担忧。这包括许多基于WordPress的网站,也包括Node.js网站。

Node.js专为可扩展性而设计,它比大多数应用服务器更易于扩展,它的web服务器端可以处理好大量的访问流量。但是web服务并不是Node.js存在的理由——Node.js并不是因为这个目的而被构建的。

如果你有一个大流量网站,提高应用程序性能的第一步是在你的Node.js服务器前放一个反向代理服务器。这样可以保护Node.js服务器直接接触外部访问流量,还能让你灵活使用多个应用程序服务器,平衡负载服务器,缓存内容。

提升 Node.js 应用性能的 5 个技巧

在现有的服务器设置前放NGINX作为一个反向代理服务器,是NGINX的核心用例,全世界各地已经有数以千万计的网站实施了。

使用NGINX作为Node.js的反向代理服务器还有一些特定的优势,其中包括:

  • 简化操作权限和端口分配
  • 更有效地服务于静态图像(见第二个小窍门)
  • 成功管理Node.js崩溃的情况
  • 减轻DoS***

注意:这些教程介绍了如何使用NGINX作为在Ubuntu 14.04或CentOS环境中的反向代理服务器,而且可以总览NGINX置于node.js之前的整体情况。

2.缓存静态文件

随着基于Node.js的网站的使用量的增长,服务器的压力开始越来越大。这时候你要做这两件事情:

  1. 充分利用Node.js服务器。
  2. 使得添加应用程序服务器和负载均衡变得容易。

这其实是很容易做到的。一开始就实施NGINX作为反向代理服务器,就像第一点技巧中所描述的那样。这样就能轻易实现高速缓存、负载平衡(如果有多个Node.js服务器的话)等。

针对Modulus,一个应用程序容器平台,有一篇非常有用的关于利用NGINX增压Node.js应用程序性能的文章。由于Node.js都是靠自己完成所有的工作的,所以我们的网站平均每秒只能服务将近900个请求。使用NGINX作为反向代理服务器,提供静态内容,一个站点每秒可服务超过1600个请求——性能提升了近2倍。

性能的提升能让你有时间采取额外措施以适应进访问量的增长,如审查(或提高)网站设计,优化程序代码,部署更多的应用程序服务器。

以下配置代码适用运行于Modulus的网站:

server {
  listen 80;
  server_name static-test-47242.onmodulus.net;
  root /mnt/app;
  index index.html index.htm;
  location /static/ {
   try_files $uri $uri/ =404;
  }
  location /api/ {
   proxy_pass http://node-test-45750.onmodulus.net;
  }
}

例如,在Nginx位置块中,你可能不想要缓存某些内容。例如,你通常不会想要缓存博客平台的管理界面的。以下就是禁用[或免除]缓存Ghost管理界面的配置代码:

location ~ ^/(?:ghost|signout) { 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://ghost_upstream;
        add_header Cache-Control "no-cache, private, no-store,
        must-revalidate, max-stale=0, post-check=0, pre-check=0";
    }

缓存NGINX服务器上的静态文件可以显著减轻Node.js应用程序服务器的负载,让它能够达到更佳性能。

本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。**获取资料

相关内容

热门资讯

从北京望中东:和平,虽远在中国... ◆笔者参与的分论坛“维护中东和平:挑战与出路”正在进行中。今年7月举行的第十四届世界和平论坛上,中东...
巨大冲击!美国AI“闭源高价售... 日本计算机社会学专家塚越健司7月24日发表题为《中国AI“Kimi K3”引发巨大冲击——撼动美国A...
人民锐评:中国籍数学家首获全球... 历史性的突破!日前,第二十一届菲尔兹奖得主名单揭晓,北大2007级本科校友王虹、邓煜双双获奖,无数网...
深度专访|网易智企段毓铮:不敢... 企业AI的商业化,难点在于让客户敢用、会用、用得有效果。在WAIC现场,搜狐AI邀请到网易智企副总经...
来论|从“菲尔兹奖”,看见科技... 王虹、邓煜分别凭借在调和分析与几何测度论、偏微分方程与数学物理领域的突破性工作,共同荣获2026年菲...
当清洁机器人爬上窗户,能否开启... 过去十年,清洁机器人的故事,几乎都发生在地面上。 扫地、拖地、洗地,从随机碰撞到激光导航,从人工洗抹...
冰箱通电发烫压缩不启动不制冷什... 1、很有可能是因为冰箱的压缩机内高压输出缓冲管出现了断裂,造成高压管不排气,低压管不吸气的这种状况,...
冰箱能通电但是不制冷什么问题 1、电源问题先检查冰箱的电源,看电源的连接是否正常,插头是否通电,插稳。插好插头之后,可以看一下冰箱...
洗衣机通电为什么不转动 导致这类问题一般有这几种情况:可能是进水电磁阀故障导致,若电磁阀已得电还不进水,就是电磁阀的阀芯被卡...
海尔洗衣机不转动了但是会流水 洗衣机可以进水说明电磁阀工作正常;能排水,说明排水泵是正常。洗衣机电源是没有问题的,但是不转动说明洗...