使用 Dynatrace 对 Node.js 应用的性能数据进行分析

简介: 使用 Dynatrace 对 Node.js 应用的性能数据进行分析

JavaScript Storefront 应用程序的性能问题的表现形式有多种,最典型的是响应时间(response time)的恶化,甚至由于资源耗尽导致的网站完全宕机。 由于 JavaScript Storefront 涉及许多组件,因此确定性能问题的根源可能具有挑战性,如下图所示:


image.png


一个客户请求发送到 JavaScript Storefront 之后,Storefront 应用对该请求的处理,将涉及以下组件,所有这些都可能是问题的根源:


  • 客户端(浏览器或 CDN)
  • Apache Web 服务器(通过 JS Storefront vhost),也就是 Commerce Cloud 支持的 redirect endpoint 功能的实现
  • Nginx Web 服务器(jsapps pod 的 jsapps 容器)
  • Server.js(jsapps pod 的 jsapps-ssr 容器 - 仅在启用 SSR 模式时相关)
  • CDN(上面没有说明,但是如果使用 CDN,那么它将位于此级别 - 如果未找到缓存的响应,请求可以在此处结束或继续到源服务器)
  • Apache Web 服务器(通过 API vhost)
  • 商务网络服务(API pod)
  • 数据库

一般情况下,我们可以从 Dynatrace 的 Services 面板开始,这里能看到不同类别的服务的平均响应时间,最慢的响应时间,以及每分钟处理的请求数量。


image.png


作为性能分析的切入点,我们可以从应用响应用户请求的最外层服务开始入手,单击右侧的服务列表中的 ... 符号。


下图的含义是,设置过滤器的值为 响应时间 >= 6s, 这将允许仅可视化最慢请求的响应时间热点。


image.png


另外注意,Promise.all 这个 API,如果使用不恰当,也可能带来性能问题,特别是用大量的操作调用它的时候。


例如,我们有一个 ids 数组,需要从数据库中根据 id 读取实体。 如果列表中有 10 个 id,那不是问题,但如果有 1000 个的话,不建议一次性从数据库中完成全部的数据读取操作。一种更优的解决方案是,采用批量操作 + 游标的方式,从数据库中读取数据。



相关文章
|
5月前
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,如何优化游戏性能,比如减少重绘、提高动画流畅度?
提升JavaScript游戏性能的关键点包括:使用requestAnimationFrame优化动画流畅度;减少DOM操作,利用DocumentFragment或虚拟DOM;使用Canvas/WebGL高效渲染;优化图像资源,压缩图片和使用雪碧图;分层渲染与视口裁剪减少无效绘制;借助Web Workers进行后台计算;缓存计算结果;合理添加事件监听器并采用事件委托;定期进行性能分析以找到并解决瓶颈。不断测试与调整是优化的关键。
91 4
|
5月前
|
数据采集 并行计算 JavaScript
实战指南:在 Node.js 中利用多线程提升性能
在 Node.js 的世界中,多线程技术一直是一个受到广泛关注的领域。最初,Node.js 设计为单线程模式。随着技术发展,Node.js 引入了多线程支持,进而利用多核处理器的强大性能,提升了应用性能。接下来的内容将深入探讨 Node.js 如何实现多线程,以及在何种场合应该采用这种技术。
|
5月前
|
负载均衡 JavaScript 算法
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
141 1
|
4月前
|
JavaScript 前端开发
事件委托是JS技巧,通过绑定事件到父元素利用事件冒泡,减少事件处理器数量,提高性能和节省内存。
【6月更文挑战第27天】事件委托是JS技巧,通过绑定事件到父元素利用事件冒泡,减少事件处理器数量,提高性能和节省内存。例如,动态列表可共享一个`click`事件处理器,通过`event.target`识别触发事件的子元素,简化管理和响应动态内容变化。
39 0
|
22天前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
63 5
|
2月前
|
缓存 前端开发 JavaScript
超时空加速秘籍:揭秘JavaScript前端开发中的性能魔法,让您的Web应用瞬间穿越到未来!
【8月更文挑战第27天】本文介绍了一系列实用的JavaScript性能优化方法并提供了示例代码,包括减少DOM操作、使用事件委托、避免阻塞主线程、异步加载资源、利用浏览器缓存、代码分割以及使用Service Worker等技术,帮助开发者有效提升Web应用性能和用户体验。
40 2
|
2月前
|
JavaScript 前端开发
深入理解Node.js事件循环及其对后端性能的影响
【8月更文挑战第31天】 本文将带你一探Node.js的核心概念—事件循环,揭示其工作原理及如何影响后端应用的性能。我们将从基础的事件驱动模型出发,通过代码示例和性能分析,展示如何有效利用事件循环来提升应用响应速度和处理能力。
|
4月前
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,优化游戏性能是非常重要的
【6月更文挑战第16天】JavaScript小游戏性能优化涉及动画流畅度和减少重绘:使用requestAnimationFrame替代定时器;减少DOM操作,利用DocumentFragment或虚拟DOM;Canvas/WebGL高效渲染;压缩图像,使用雪碧图;分层渲染与视口裁剪;Web Workers处理后台计算;缓存计算结果;事件委托;定期性能分析。优化是持续过程,需结合具体需求调整。
63 8
|
3月前
|
JavaScript API 索引
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
49 0
|
3月前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
48 0
下一篇
无影云桌面