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

2015-07-09 10:05:46 +08:00
 OneAPM

在这个由软件定义的世界里,企业往往是通过 Web 应用和移动应用程序来提供他们大部分的服务。所以对企业来说,一个非常重要的任务就是要确保用户拥有出色的使用体验。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 等等。


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

3800 次点击
所在节点    Node.js
2 条回复
cheng007
2015-07-09 11:35:41 +08:00
一个又一个的回调
被IO割裂的逻辑代码
smithtel
2015-07-09 14:13:26 +08:00
这节点是什么鬼。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX