Node.js 应用性能优化的五个技巧 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OneAPM

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

  •  6
     
  •   OneAPM 2015 年 7 月 9 日 4194 次点击
    这是一个创建于 3944 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在这个由软件定义的世界里,企业往往是通过 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 的应用性能进行优化的话,可以点击这里进行下载,免费试用一下!

    2 条回复    2015-07-09 14:13:26 +08:00
    cheng007
        1
    cheng007  
       2015 年 7 月 9 日
    一个又一个的回调
    被IO割裂的逻辑代码
    smithtel
        2
    smithtel  
       2015 年 7 月 9 日
    这节点是什么鬼。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2748 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 09:51 PVG 17:51 LAX 02:51 JFK 05:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86