Node.js 应用性能优化的五个技巧

Stella981
• 阅读 287

在这个由软件定义的世界里,企业往往是通过 Web 应用和移动应用程序来提供他们大部分的服务。所以对企业来说,一个非常重要的任务就是要确保用户拥有出色的使用体验。Node.js 正迅速成为时下最流行的平台之一,它被用于方便地搭建响应速度快、易于扩展的网络应用和移动应用程序。通过下图也可以看出,Node.js 正在成为新的主流。

Node.js 应用性能优化的五个技巧

众所周知,Node.js 是单线程服务器,新事件会触发代码的执行,进行一系列 I/O 操作,并在完成后回调。对于 I/O 密集型的应用,例如 Web 和移动应用程序,这种事件驱动异步调用的计算模型非常有用,不过要在一个关键事务里同时跟踪多个异步调用则是一项艰巨的任务。

在不久前, InfoWorld 发布了一篇文章,标题是《Node.js 日趋成熟:面临的新机遇和风险》,在这篇文章中,Serdar Yegulalp 对由 Node.js 驱动应用程序面临的机遇和风险做了评论,他也谈到 Koa、Express 和 Node.js-canvas 项目创造者 TJ Holowaychuk 从 Node.js 的开发社区中退出这件事。对 Holowaychuk 来说,Node.js 是一个很有价值、很有生命力的项目,但 「如果你的应用非常脆弱,难以进行调试,并且很难进行重构和开发的话,那么性能再好也没有用」,他的这番话突出了 Node.js 目前所面临的挑战。

既然 Node.js 已日渐成为主流,而且企业也开始使用 Node.js 来构建他们关键业务的移动端和 Web 端应用程序。那么,提高 Node.js 应用基础架构和异步调用过程的能见度,以及支撑程序和硬件基础设施的可视化,对企业来说就变得至关重要。

应用性能管理「APM」就提供了一个很好的解决方案。APM 可以帮助企业实时地对 Node.js 性能监控,深入调用堆栈,在整个分布式环境中串联起事务,诊断生产和开发环境中的性能瓶颈。而且,企业也需要这种可视性,让潜在问题在真正影响到用户之前就被解决掉。而对于影响用户体验、导致评分很低的性能问题,他们也需要一种深入源码级别的调试手段。

以下是确保 Node.js 程序最佳性能的五个技巧:

1. 确保 Node.js 应用环境获得终端到端的可视性

首先,APM 解决方案可以自动发现应用的拓扑结构和相互依存关系,并基于线上应用程序的行为来跟踪关键事务,然后把它们关联起来。你应该确保自己的解决方案能够跟踪 Node.js 事件循环中所有的异步调用,并结合关键事务组合起来进行分析。同时,你应该能够清楚地看到关键事务端到端的展现和优先程度,而不只是程序和基础设施节点的健康状况。

2. 实时检测程序错误和异常

其实,APM 解决方案应该能够实时地监测到由各个模块抛出的错误和异常。通过不断跟踪业务性能,你应该能够找到那些偏离正常范围的较慢交易,深入到实际问题,在它切实影响到用户之前,主动地修复错误或尽快解决异常问题。

3. 从代码级别监控应用程序

如果想要排查任何性能问题,最好能够深入到源代码级的级别。试想这样一个解决方案,它可以非常深入地监控应用程序,抓到 Node.js 事件循环中所有异步调用并提供调用图。然后,你就可以通过浏览器或移动应用程序,轻松地定位到程序代码中的热点和慢方法。

4. 关注你的终端用户体验

你应该能够使用相同的监控方案,直观地看到全球各地的监测数据,来了解移动端和 Web 端的用户体验。这也能让你快速识别 Node.js 应用程序代码中那些不好的代码,在这些问题切实影响到用户体验之前修复它们,从而避免用户在社交媒体上分享他们糟糕的体验,他们有可能会卸载你的应用程序,甚至还会在 App Store 和其他评论网站上给予差评。

5. 关注 Node.js 应用程序依赖的数据库和服务器

对于频繁访问数据库的现代 I/O 密集型网站,Node.js 非阻塞的特点被认为是非常理想的。所以,关注支撑起 Node.js 应用程序的数据库、服务器等基础设施的性能是非常重要的。你应该能够深入到慢查询、存储过程,或者硬件基础设施层面去快速的诊断和解决 Node.js 应用程序的问题。

作为国内 APM 领域的领军企业,OneAPM 是国内首家支持 Node.js 的应用性能管理云解决方案,不仅可以帮你找到 Node.js 应用内部性能表现最差的事务,还可以定位数据库中能耗最大的部件。为了适应 Node.js, OneAPM 现在也支持非关系型数据库 Redis、MongoDB 以及 Memcached 等等。

Node.js 应用性能优化的五个技巧 Node.js 应用性能优化的五个技巧

除此之外,通过查看性能表现差的第三方 API、Web Services、内存使用量等性能数据,还能够帮助你快速定位性能瓶颈;通过事务的深度 Traces 记录,协助你完成应用性能管理从抽象到具象的追溯过程。如果你想对 Node.js 的应用性能进行优化的话,可以点击这里进行下载,免费试用一下!

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这