diff --git a/frameworks/morojs/README.md b/frameworks/morojs/README.md index e7b8bd040..48364edb7 100644 --- a/frameworks/morojs/README.md +++ b/frameworks/morojs/README.md @@ -6,7 +6,7 @@ MoroJS on its native HTTP engine, clustered by the framework itself. - **Language:** JavaScript - **Runtime:** Node.js 26 -- **Framework:** [MoroJS 1.8](https://github.com/Moro-JS/moro) on `@morojs/engine` 1.1.16, its own native HTTP engine +- **Framework:** [MoroJS 1.8](https://github.com/Moro-JS/moro) on `@morojs/engine` 1.1.17, its own native HTTP engine - **Build:** Multi-stage on `node:26.13-trixie-slim` (pinned by minor: the compression middleware's reused brotli encoder needs Node 26.11 or later, and the bench host builds against whatever `node:26` it has cached); the engine ships prebuilt binaries, so no toolchain @@ -66,7 +66,11 @@ MoroJS on its native HTTP engine, clustered by the framework itself. - `json-tls`, `static-tls` and `8gbit` listen on `8081` behind the engine's own TLS listener (TLS 1.3, ALPN `http/1.1`), when `/certs/server.crt` and `/certs/server.key` are mounted. Moro locks one configuration per process, so that listener is a second process running the same file - with `MORO_ROLE=tls`, clustered the same way; it is not started when the certificates are absent. + with `MORO_ROLE=tls`, clustered the same way; it is not started when the certificates are absent. The + engine terminates TLS on its own OpenSSL BIOs (1.1.17): one copy in, ciphertext appended straight + into the buffer it sends from, and a body over 8 KiB encrypted from the caller's bytes rather than + copied behind the head first. Measured at one worker on these three request mixes, CPU per request + fell by a fifth on the static files, a seventh on the JSON bodies and a sixth on the 100 KB echo. - `tls_check` is opted into: a third process of the same file (`MORO_ROLE=tlscheck`) listens on `9000` reading `/certs-tls`, with `server.ssl.watch: true`, so a pair replaced on disk is validated and swapped onto the running listener without a restart and without touching diff --git a/frameworks/morojs/package.json b/frameworks/morojs/package.json index 4ea598ec6..bf6c19f5a 100644 --- a/frameworks/morojs/package.json +++ b/frameworks/morojs/package.json @@ -2,7 +2,7 @@ "name": "httparena-morojs", "private": true, "dependencies": { - "@morojs/moro": "^1.8.20", + "@morojs/moro": "^1.8.21", "ejs": "^3.1.10", "pg": "^8.16.3", "redis": "^5.0.0" diff --git a/site/data/results/morojs.json b/site/data/results/morojs.json index 9784dcbf6..83f0fce51 100644 --- a/site/data/results/morojs.json +++ b/site/data/results/morojs.json @@ -4,27 +4,27 @@ "8gbit-512": { "framework": "morojs", "language": "JS", - "rps": 49365, - "avg_latency": "108.7us", - "p99_latency": "157.0us", - "cpu": "323.7%", + "rps": 49301, + "avg_latency": "110.8us", + "p99_latency": "141.0us", + "cpu": "298.7%", "memory": "9.3GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "511.37MB/s", - "input_bw": "482.08MB/s", + "bandwidth": "510.71MB/s", + "input_bw": "481.46MB/s", "reconnects": 0, - "status_2xx": 246889, + "status_2xx": 246579, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0, - "cpu_usec": 17507161, - "cpu_per_req_us": 70.9111, + "cpu_usec": 16278174, + "cpu_per_req_us": 66.0161, "target_rate": 50000, - "rate_ratio": 0.9873, - "p99_9_latency": "2785.0us" + "rate_ratio": 0.986, + "p99_9_latency": "7434.0us" }, "async-32000": { "framework": "morojs", @@ -529,18 +529,18 @@ "json-tls-4096": { "framework": "morojs", "language": "JS", - "rps": 925942, - "avg_latency": "4.40ms", - "p99_latency": "46.70ms", - "cpu": "6611.1%", - "memory": "9.1GiB", + "rps": 1045809, + "avg_latency": "3.89ms", + "p99_latency": "42.10ms", + "cpu": "6580.6%", + "memory": "8.9GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "3.13GB", + "bandwidth": "3.53GB", "reconnects": 0, - "status_2xx": 4721874, + "status_2xx": 5333484, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -745,18 +745,18 @@ "static-tls-1024": { "framework": "morojs", "language": "JS", - "rps": 364052, - "avg_latency": "2.88ms", - "p99_latency": "31.04ms", - "cpu": "6433.8%", + "rps": 781829, + "avg_latency": "1.31ms", + "p99_latency": "18.52ms", + "cpu": "6533.2%", "memory": "8.6GiB", "connections": 1024, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "5.61GB", + "bandwidth": "12.04GB", "reconnects": 0, - "status_2xx": 1856620, + "status_2xx": 3986968, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0