首页 > 编程语言 >Node.js vs. Spring Boot:Hello World 性能对决,谁更快一点?

Node.js vs. Spring Boot:Hello World 性能对决,谁更快一点?

时间:2023-09-14 09:11:28浏览次数:47  
标签:Node Spring resp Boot js import

前言:

Spring Boot 在 Java 生态中备受欢迎,它是一款基于 Java 构建的轻量级服务端框架,主要用于 Web 服务。Spring Boot 的应用使得创建各类基于 Spring 的企业级应用变得异常简单。Node.js作为一种基于Chrome V8引擎的JavaScript运行时环境,在服务端上运行JavaScript代码。它以其独特的特性为我们提供了极其便捷的开发方式,今天小编就为大家对比一下Spring Boot与Node.js之间的性能差异。

运行环境:

硬件:MacBook Pro M1 16g

测试工具:Bombardier

测试并发数:50、100、200

版本:

Node.js v19.6.0

Spring Boot v3.0.2

Java17

Node.js 测试代码:

import http from "node:http";

 http.createServer((req, resp) => {
  try {
   if (req.method !== "GET") {
    return resp.writeHead(405).end();
   }
   if (req.url !== "/") {
    return resp.writeHead(404).end();
   }
   resp.writeHead(200, {
    "content-type": "text/plain",
   });
   resp.end("Hello world");
  } catch (e) {
   resp.writeHead(500).end();
  }
 }).listen(3000);

Spring Boot测试代码:

package com.example.demo;

 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.Spring BootApplication;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RestController;

 @Spring BootApplication
 @RestController
 public class DemoApplication {

   public static void main(String[] args) {
     SpringApplication.run(DemoApplication.class, args);
   }

   @GetMapping("/")
   public String handleRequest() {
     return "Hello World!";
   }
 }

测试时,每个并发执行500万请求,对比如下性能指标:

  • 耗时
  • 每秒处理请求数
  • 延迟:平均值、中值、q25、q75、q90、最大值(以毫秒为单位)
  • 资源占用情况:CPU和内存平均使用率

测试结果:

经过对比测试,绘制了如下图表(延迟以毫秒为单位):

测试结果分析:

资源占用方面,Spring/Java 是一个资源密集型应用,在一个简单的“Hello World”案例中,200并发情况下,Spring 使用了约190%的 CPU 和 470M 的内存。相比之下,Node.js 使用了 95% 的 CPU 和 82M 的内存。

延迟方面,在q75之前,Spring 的延迟低于 Node.js。Spring在最大延迟达到了几秒钟,而Node.js的最大延迟仅 123ms。Spring 的延迟中位数(0.6ms)优于 Node.js(2.5ms)。

总结来看,Node.js 在使用显著较少的系统资源的情况下”吞吐量“(RPS/每秒请求数)更高。

原文链接:https://medium.com/deno-the-complete-reference/node-js-vs-springboot-hello-world-performance-comparison-59b4d461526c

扩展链接:

扩展链接:

ChatGPT赋能低代码开发:打造智能应用的双重引擎

窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器

3D模型+BI分析,打造全新的交互式3D可视化大屏开发方案

标签:Node,Spring,resp,Boot,js,import
From: https://www.cnblogs.com/powertoolsteam/p/17686998.html

相关文章

  • SpringMVC报错:HTTP Status 405 - JSPs only permit GET POST or HEAD
    错误描述如果项目是运行在Tomcat8及以上版本,浏览器发出的PUT请求和DELETE请求可以被页面控制器(Controller)成功接收到,但是返回JSP页面则会报HTTP405的错误提示:"消息JSP只允许GET、POST或HEAD。Jasper还允许OPTIONS"。原因分析原因是Tomcat按照JCP规范(JSP......
  • Spring - DI 依赖注入和 IoC 容器
    前言先理解DI依赖注入再理解Ioc容器更好,不应该先理解IoC容器再理解DI依赖注入。这两个东西必须要放在一起讲,但是又要分好顺序去理解。理解之前不能先看概念,非常地抽象,应该从“为什么”起理解。总而言之,这个两个东西的出现是为了降低程序的耦合度。DI依赖注入Java里......
  • springcloud相关面试题
    (目录)springcloud相关面试题springcloud中网关起什么作用在SpringCloud中,网关起到了路由和过滤的作用。路由:网关通过配置路由规则,将请求转发到不同的服务实例上。它可以根据请求的URL、请求的HTTP方法、请求的Header等信息,将请求路由到相应的服务实例上。通过网关,可以实现......
  • Node.js child_process spawn All In One
    Node.jschild_processspawnAllInOneNode.js多线程//const{spawn}=require('child_process');const{spawn}=require('node:child_process');//$ls-al/usr等价于constls=spawn('ls',['-lh','/usr�......
  • spring-websocket 简单使用
    之前自己基于netty实现了websocket协议,实现单聊以及群聊。这里记录下spring封装的spring-websocket使用方式。1.后端1.pom<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation......
  • springboot集成CAS客户端实现单点登录
    pom中引入依赖<!--cas--><dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.6.2</version></dependen......
  • Spring MVC 教程,快速入门,深入分析
    SpringMVC教程,快速入门,深入分析资源下载:Spring_MVC_教程_快速入门_深入分析V1.1.pdfSpringMVC核心配置文件示例.rar 作者:赵磊博客:http://elf8848.iteye.com 目录一、前言二、springmvc核心类与接口三、springmvc 核心流程图四、springmvc DispatcherServlet......
  • Spring容器跳过指定对象初始化扫
    在Spring容器中,如果你希望跳过指定对象的初始化扫描,你可以使用`@ComponentScan`注解的`excludeFilters`属性来实现。`excludeFilters`属性可以指定扫描时需要排除的类或接口。例如,假设你有一个名为`MyBean`的对象,你不希望它被Spring容器初始化扫描。你可以创建一个自定义的过滤器来......
  • Spring高手之路14——深入浅出:SPI机制在JDK与Spring Boot中的应用
    1.SPI解读:什么是SPI?  SPI (ServiceProviderInterface)是一种服务发现机制,它允许第三方提供者为核心库或主框架提供实现或扩展。这种设计允许核心库/框架在不修改自身代码的情况下,通过第三方实现来增强功能。JDK原生的SPI:定义和发现:JDK的SPI主要通过在META-INF/services/目......
  • springboot 整合 nacos 实现配置文件统一管理 和 服务注册
    1.我使用的是 nacos-server-1.4.1 直接启动nacos没有配置数据库那些.\startup.cmd-mstandalone2.启动后在nacos中创建命名空间配置文件 注意命名空间的id我是自己定义的还有group到时候配置错了服务又不会报错只是会读取不到3.springboot配置 server-addr......