# PRNext vs Next.js VPS benchmarks: CPU, RAM and latency

Compare PRNext and Next.js across four CPU and memory budgets: throughput, p95, CPU per response and PSS RAM. Explore the data, method and limitations.

Choose a runtime around the routes your application actually serves. Explore four resource budgets and four scenarios, then examine what each result can support.

## 0.7 CPU · 700 MiB

Quota 0.7 CPU · 700 MiB · Node 22.23.4 · 1 worker PRNext · 1 Next.js process · old-space 384 MiB

### SSR · 100 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 81.33 | 51.00 |
| p95 latency (ms) | 264.25 | 420.90 |
| CPU / response (CPU ms) | 8.46 | 13.39 |
| PSS memory (MiB) | 113.88 | 101.38 |

### Heavy SSR · 1,000 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 11.33 | 10.33 |
| p95 latency (ms) | 1,550.25 | 1,661.80 |
| CPU / response (CPU ms) | 58.92 | 62.10 |
| PSS memory (MiB) | 139.51 | 119.46 |

### JSON API · 16 entries

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 518.17 | 352.80 |
| p95 latency (ms) | 61.40 | 90.05 |
| CPU / response (CPU ms) | 1.27 | 1.94 |
| PSS memory (MiB) | 139.63 | 113.08 |

The load generator may limit throughput in this scenario. A small gap is insufficient to distinguish the runtimes.

### Streaming · 40 ms Suspense

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 138.13 | 80.03 |
| p95 latency (ms) | 182.65 | 307.25 |
| CPU / response (CPU ms) | 4.98 | 8.62 |
| PSS memory (MiB) | 135.32 | 115.54 |

## 1 CPU · 384 MiB

Quota 1 CPU · 384 MiB · Node 24.22.1 · 1 worker PRNext · 1 Next.js process · old-space 192 MiB

### SSR · 100 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 99.77 | 59.90 |
| p95 latency (ms) | 227.20 | 365.35 |
| CPU / response (CPU ms) | 9.90 | 16.78 |
| PSS memory (MiB) | 109.85 | 126.50 |

### Heavy SSR · 1,000 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 13.60 | 10.00 |
| p95 latency (ms) | 1,329.65 | 1,932.90 |
| CPU / response (CPU ms) | 72.82 | 95.47 |
| PSS memory (MiB) | 139.97 | 158.74 |

### JSON API · 16 entries

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 849.63 | 409.13 |
| p95 latency (ms) | 38.75 | 76.85 |
| CPU / response (CPU ms) | 1.18 | 2.45 |
| PSS memory (MiB) | 128.40 | 163.78 |

### Streaming · 40 ms Suspense

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 220.90 | 86.27 |
| p95 latency (ms) | 108.50 | 299.30 |
| CPU / response (CPU ms) | 4.51 | 11.47 |
| PSS memory (MiB) | 140.27 | 167.14 |

## 2 CPU · 1 GiB

Quota 2 CPU · 1 GiB · Node 24.22.1 · 1 worker PRNext · 1 Next.js process · old-space 384 MiB

### SSR · 100 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 224.70 | 142.97 |
| p95 latency (ms) | 89.75 | 154.55 |
| CPU / response (CPU ms) | 7.57 | 10.29 |
| PSS memory (MiB) | 117.50 | 173.30 |

### Heavy SSR · 1,000 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 24.00 | 27.63 |
| p95 latency (ms) | 740.75 | 622.25 |
| CPU / response (CPU ms) | 64.42 | 49.91 |
| PSS memory (MiB) | 164.17 | 198.96 |

### JSON API · 16 entries

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 2,078.33 | 1,001.40 |
| p95 latency (ms) | 14.00 | 28.25 |
| CPU / response (CPU ms) | 0.83 | 1.22 |
| PSS memory (MiB) | 144.80 | 203.93 |

### Streaming · 40 ms Suspense

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 341.00 | 218.67 |
| p95 latency (ms) | 55.15 | 105.00 |
| CPU / response (CPU ms) | 4.40 | 6.31 |
| PSS memory (MiB) | 154.70 | 206.20 |

## 4 CPU · 2 GiB

Quota 4 CPU · 2 GiB · Node 24.22.1 · 2 workers PRNext · 2 Next.js processes · old-space 384 MiB

At the four-CPU budget, Next.js uses two processes and a proxy included in the measurements. Other budgets use direct servers.

### SSR · 100 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 383.30 | 247.13 |
| p95 latency (ms) | 56.35 | 133.50 |
| CPU / response (CPU ms) | 8.49 | 11.80 |
| PSS memory (MiB) | 206.60 | 458.33 |

### Heavy SSR · 1,000 rows

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 46.37 | 45.50 |
| p95 latency (ms) | 450.10 | 688.85 |
| CPU / response (CPU ms) | 68.28 | 62.55 |
| PSS memory (MiB) | 272.22 | 520.04 |

### JSON API · 16 entries

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 3,421.17 | 1,582.60 |
| p95 latency (ms) | 8.20 | 24.05 |
| CPU / response (CPU ms) | 0.91 | 1.90 |
| PSS memory (MiB) | 242.97 | 525.35 |

The load generator may limit throughput in this scenario. A small gap is insufficient to distinguish the runtimes.

### Streaming · 40 ms Suspense

| Metric | PRNext candidate | Next.js 16.4.3 |
| --- | --- | --- |
| Validated throughput (req/s) | 356.90 | 313.77 |
| p95 latency (ms) | 48.45 | 68.75 |
| CPU / response (CPU ms) | 5.09 | 7.98 |
| PSS memory (MiB) | 262.35 | 542.40 |

## Which budget matches your project?

[PRNext vs Next.js at 0.7 CPU · 700 MiB: the CPU/RAM tradeoff](/benchmarks/prnext-nextjs-0-7-cpu-700-mib)

[PRNext vs Next.js at 2 CPU · 1 GiB: SSR and heavy rendering](/benchmarks/prnext-nextjs-2-cpu-1-gib)

## How to read this benchmark

The 2026-10-29 campaign uses React 19.3.1, the PRNext Balanced profile and gzip. Each variant gets 5 seconds of warmup, followed by 15 seconds of measurement with 16 connections. Values are medians of two alternating windows per variant, route and budget.

Throughput counts successful, validated responses. CPU means CPU time per successful response. RAM is median process-tree PSS in MiB, not RSS or total VPS memory. Reported latency is the median of the two window p95 values, rather than a p95 recomputed over all requests.

## Which code was measured?

PRNext is a development candidate for 0.1.18-alpha, with a manifest reporting 0.1.17-alpha. Next.js is version 16.4.3. The final 0.1.18-alpha release was not measured by this campaign: these figures do not measure its npm archive.

Source commit: 2856155dc32618d00ea7cbe05d771f589c9df536

Native SHA-256: e78bce35c1029500eec67d4aad5e3c08a5d9b74b3125aa3d10c854c5a286b843

Package SHA-256: 0099abf612f223625caf769f97608be1b4f6daf87a33c2bc92abe9517edbb095

## What these results cannot predict

Two short repetitions on a synthetic application provide no confidence interval. The small VPS shares its CPU with the load generator, and fast API routes may be generator-limited. Hardware and Node versions differ between hosts, so comparisons across budgets cannot isolate the hardware effect.

These measurements do not establish concurrent product users, how many projects fit on a VPS, or savings on a bill. Databases, external calls, caches, browser work and application wake-ups change the outcome. Sleep and endurance observations remain in the full comparison.

## Test your own application

Start with your busiest and most expensive routes. Validate response content and errors before comparing speed. Keep quotas, dependencies, caching settings and load identical for both runtimes. Repeat longer windows before making a decision.

## Data and test protocol

[Download the JSON data](/benchmarks/prnext-vs-next-2026-10-29.json)

[Read the full comparison](/blog/prnext-vs-nextjs-vps-benchmarks)

[Fixture](https://github.com/Lorkydey/PRNext/blob/2856155dc32618d00ea7cbe05d771f589c9df536/tests/performance/production-fixture.mjs)

[Corrected load generator](https://github.com/Lorkydey/PRNext/blob/fb59284854850ba0293fab30cc215bbd9aba6c72/tests/performance/production-load.mjs)

[All benchmarks](/benchmarks)

---

Language: en

Canonical: https://prnext.dev/benchmarks

Index: https://prnext.dev/llms.txt
