`

Benchmark: Deno con DenoTrain vs NodeJS con ExpressJS

Ayer, 13 de Mayo, salió la release 1.0 de Deno, este nuevo lenguaje...?

Con la espalda de Ryan Dahl haciendo el nuevo NodeJS con Rust y TypeScript que promete ser más moderno, simple y seguro. Quiere hacerle competencia directa a NodeJS.

Así que empecemos haciendo algunos benchmarks de performance en cuanto a requests.

Para esto usé una MacBook Pro 2017 con un Intel Core i5 a 2,3Ghz

NodeJS lo corrí con el clásico ExpressJS y Deno con DenoTrain que vendría a ser el remplazo de ExpressJS.

NodeJS con Express, código:

const express = require("express");
const app = express();

app.get("/", (req, res) => {
    res.send("Hello World!");
});

app.listen(3000, () => {
    console.log("Example app listening on port 3000!");
});

Deno con DenoTrain, código:

import { Application } from "https://deno.land/x/denotrain@v0.4.0/mod.ts";

const app = new Application({ port: 3001 });

app.get("/", (ctx) => {
    return "Hello World!";
});

await app.run();

Ambas apps imprimen un "Hello World!".

La prueba de carga la vamos a hacer con autocannon, es una herramienta especializada en hacer benchmarking sobre HTTP, así que arranquemos.

Primer benchmark

Tiempo: 10 segundos | Conexiones: 10 | Pipeline requests: 1

Node JS con Express

Stat 2.5% 50% 97.5% 99% Avg Stdev Max
Latency 0 ms 0 ms 1 ms 2ms 0.22 ms 0.51 ms 20.69 ms
Stat 1% 2.5% 50% 97.5% Avg Stdev Min
Req/Sec 6807 6807 13343 14263 12660.91 2046.63 6804
Bytes/Sec 1.47mb 1.47mb 2.88mb 3.08mb 2.73mb 442kb 1.47mb

Total: 139k requests

Deno con DenoTrain

Stat 2.5% 50% 97.5% 99% Avg Stdev Max
Latency 0 ms 0 ms 1 ms 1 ms 0.09 ms 0.39 ms 23.68 ms
Stat 1% 2.5% 50% 97.5% Avg Stdev Min
Req/Sec 9927 9927 15791 16111 14847.64 1745.82 9925
Bytes/Sec 1.54mb 1.54mb 2.45mb 2.5mb 2.3mb 270kb 1.54mb

Total: 163k requests

Segundo benchmark

Tiempo: 10 segundos | Conexiones: 100 | Pipeline requests: 10

Node JS con Express

Stat 2.5% 50% 97.5% 99% Avg Stdev Max
Latency 0 ms 0 ms 47 ms 53ms 4.8 ms 15.15 ms 356.46 ms
Stat 1% 2.5% 50% 97.5% Avg Stdev Min
Req/Sec 9719 9719 21455 22095 20294.19 3390.44 9718
Bytes/Sec 2.1mb 2.1mb 4.63mb 4.77mb 4.38mb 732kB 2.1mb

Total: 223k requests

Deno con DenoTrain

Stat 2.5% 50% 97.5% 99% Avg Stdev Max
Latency 3 ms 4 ms 9 ms 11ms 4.93 ms 1.97 ms 51.88 ms
Stat 1% 2.5% 50% 97.5% Avg Stdev Min
Req/Sec 13079 13079 18511 19759 18430 1880.15 13079
Bytes/Sec 2.03mb 2.03mb 2.87mb 2.86mb 291kb 732kb 2.03mb

Total: 184k requests

En el primer benchmark con poca carga vemos como DenoTrain es superior a ExpressJS 163k vs 139k de requests. Un 17% más rápido.

En el segundo benchmark, cuando ya le empezamos a aplicar una carga más grande DenoTrain cae sobre Express. 184k vs 223k de requests. Un 21% más lento.

Deno está en sus inicios, promete muchísimo y tener a Ryan Dahl detrás del proyecto no es poca cosa, vamos a seguir esperando los nuevos releases y ver con que nos sorprenden.

Qué les parece a ustedes?

Pueden seguirme en Twitter para estar atentos a los próximos blogs y me ayuda muchísimo!

Nos vemos!

Follow @DamianCatanzaro