运行在生产系统中的企业级 JavaScript 应用的性能问题分析指南

简介: 企业级 JavaScript 应用部署在生产系统并运行后,如果出现性能问题,则找出引起这些性能问题的根源,往往不像找出引起运行时故障或者异常的根源那么简单。

企业级 JavaScript 应用部署在生产系统并运行后,如果出现性能问题,则找出引起这些性能问题的根源,往往不像找出引起运行时故障或者异常的根源那么简单。JavaScript 应用的性能问题往往表现在用户请求响应时间的下降,系统可用资源的降低甚至耗尽。


本文以一个开源的电商 Storefront 企业级应用Spartacus为例,来给大家分享 JavaScript 应用在生产系统遇到性能问题时,开发人员应该如何去分析可能的原因。

37.png

当用户在浏览器里发起一个对 Storefront 的访问请求之后,会经由下列组件进行处理。因此从理论上讲,所有这些组件都可能成为导致出现性能问题的根源之一。

  • 负载均衡服务器
  • 运行 JavaScript Storefront 的 Web Server(比如 Nginx,Apache)
  • Server.js:JavaScript Storefront 运行在服务器端渲染模式下的实现
  • CDN
  • API 服务器
  • 数据库

我们可以使用 Dynatrace 这个强大的平台来分析 JavaScript 应用的执行性能数据。Dynatrace 中的服务菜单是开始性能分析的推荐入口,因为这里能看到上述所有组件的性能数据。

38.png

可视化所有组件及其响应时间贡献的一个推荐的方法,是尽可能从调用的最外层开始,即 JavaScript Storefront 运行网站对应的 Apache 服务,在本例中为 www.demo.com:443.


单击右侧的图标 ... 并选择 Service Flow. 在随后显示的页面中,最好将分析时间的范围缩小到有明显性能问题的时间窗口。 另一种方式添加响应时间过滤器,以仅关注响应时间最慢的那些请求。


例如,设置过滤器响应时间 >= 6s,将允许仅可视化那些响应时间等于或者超过 6 秒的请求热点。

39.png

需要强调的是,Service Flow 图表里显示的每一个节点都依赖于前一个节点,因此在分析一个时间段的性能数据时,可能相邻若干节点的响应时间百分比通常都会很高,直到遇到真正有性能问题的服务为止。例如,如果性能瓶颈是数据库,那么它之前的所有层也都将参与整体贡献,即使它们只是在简单的等待数据库操作的结束。


例如,在上图所示的场景中,瓶颈似乎是 Node.js 应用程序,因为响应时间的百分比下降,发生在这个 Node.js 程序之后。


通过单击任何层并使用 ... 按钮,选择响应时间热点选项,可以查看每个级别的单个贡献者。   例如,从 www.demo.com:443 开始,我们发现一个特定的请求,对总体的响应时间百分比贡献最大。


既然我们猜想是 Node.js 应用造成的性能问题,可以进一步查看 jsapps 的性能数据,如下图,其 Code Execution 花费了 6.19 秒。

40.png

点击上图的 Code Execution,进入明细页面,再重复点击 ... 继续查看,直至发现对响应时间 6.19 s 贡献最多的那一行函数调用。



37.png

目录
相关文章
|
25天前
|
缓存 监控 Java
构建高效Android应用:从优化用户体验到提升性能
在竞争激烈的移动应用市场中,为用户提供流畅和高效的体验是至关重要的。本文深入探讨了如何通过多种技术手段来优化Android应用的性能,包括UI响应性、内存管理和多线程处理。同时,我们还将讨论如何利用最新的Android框架和工具来诊断和解决性能瓶颈。通过实例分析和最佳实践,读者将能够理解并实施必要的优化策略,以确保他们的应用在保持响应迅速的同时,还能够有效地利用系统资源。
|
2天前
|
缓存 监控 算法
Python性能优化面试:代码级、架构级与系统级优化
【4月更文挑战第19天】本文探讨了Python性能优化面试的重点,包括代码级、架构级和系统级优化。代码级优化涉及时间复杂度、空间复杂度分析,使用内置数据结构和性能分析工具。易错点包括过度优化和滥用全局变量。架构级优化关注异步编程、缓存策略和分布式系统,强调合理利用异步和缓存。系统级优化则涵盖操作系统原理、Python虚拟机优化和服务器调优,需注意监控系统资源和使用编译器加速。面试者应全面理解这些层面,以提高程序性能和面试竞争力。
13 1
Python性能优化面试:代码级、架构级与系统级优化
|
1月前
|
算法 Java 测试技术
性能工具之代码级性能测试工具ContiPerf
【2月更文挑战第23天】性能工具之代码级性能测试工具ContiPerf
267 1
性能工具之代码级性能测试工具ContiPerf
|
7月前
|
JavaScript 前端开发 数据可视化
运行在生产系统中的企业级 JavaScript 应用的性能问题分析指南
运行在生产系统中的企业级 JavaScript 应用的性能问题分析指南
40 0
|
9月前
|
存储 Java 数据安全/隐私保护
项目实战典型案例15——高并发环境下由于使用全局变量导致数据混乱 高并发环境下对象被大量创建,导致GC并是CPU飙升
项目实战典型案例15——高并发环境下由于使用全局变量导致数据混乱 高并发环境下对象被大量创建,导致GC并是CPU飙升
96 0
项目实战典型案例15——高并发环境下由于使用全局变量导致数据混乱 高并发环境下对象被大量创建,导致GC并是CPU飙升
|
9月前
|
存储 运维 Kubernetes
K8s Clinic:如何安全高效地运行 K8s
随着容器的应用,软件打包越来越左移,这意味着(取决于我们的团队组织)开发人员正在承担应用程序容器化的责任。开发人员可能还负责 Kubernetes 配置的某些部分。随着该流程向左转移,开发人员需要支持才能为组织做出正确的决策,以便安全高效地运行 Kubernetes。
58 0
|
9月前
|
缓存 API C#
如何优化线上WebAssembly
如何优化线上WebAssembly
129 1
|
10月前
|
安全 搜索推荐 机器人
API接口技术的使用可以增加软件开发和运行的灵活性,降低软件运行和维护的成本
随着科技的发展和互联网的普及,越来越多的公司和企业把业务拓展到互联网上,这就需要用到API接口技术。API(Application Programming Interface,应用程序接口)是指不同软件系统之间进行数据交流和信息共享的一种方式和规范,它通过标准化的接口实现不同系统之间的数据传递和协作,是构建应用和软件的基础。
|
安全 数据可视化 Java
Jmix - 业务系统高效开发的少代码平台
少代码具有低代码产品的所有优点,但是又没有任何低代码产品的缺点。[Jmix.cn ](https://www.jmix.cn/)从定位、产品设计方面把低代码平台的缺陷都抹平并且提升为优点。我们称它为 “少代码”。
413 2
Jmix - 业务系统高效开发的少代码平台