Monitoring latency: Vercel Serverless Function vs Vercel Edge Function | openstatus

Monitoring latency: Vercel Serverless Function vs Vercel Edge Function

Mar 14, 2024 | by Thibault Le Ouay Ducasse | [education]

In our previous article, we compared the latency of various cloud providers but did not include Vercel. This article will compare the latency of Vercel Serverless Function with Vercel Edge Function.

We will test a basic Next.js application with the app router. Below is the code for the routes:

import { NextResponse } from "next/server";

export const dynamic = "force-dynamic";

export const maxDuration = 25; // to trick and not using the same function as the other ping route

export async function GET() {
  return NextResponse.json({ ping: "pong" }, { status: 200 });
}

export async function POST(req: Request) {
  const body = await req.json();
  return NextResponse.json({ ping: body }, { status: 200 });
}

We have 4 routes, 3 using the NodeJS runtime and one is using Edge runtime.

Each route have a different maxDuration, it's a trick to avoid bundling the functions in the same physical functions.

Here is the repository of the application.

Vercel Serverless Function - NodeJS runtime

They are using the NodeJS 18 runtime. We have access to all the nodejs API. Our function are deployed in a single location: iad1 - Washington, D.C., USA.

Upgrading to Node.js 20 could enhance cold start performance, but it's still in beta.

We analyzed the header of each request and observe that all requests are processed in a data center near our location before being routed to our serverless location.

We never encountered a request routed to a different data center, and we never hit the Vercel cache.

Warm - /api/ping/warm

100% UPTIME

0# FAILS

12,090# PINGS

246 ms P50

305 ms P75

442 ms P90

563 ms P95

855 ms P99

Region Trend P75 P95 P99
πŸ‡³πŸ‡± ams 191ms 782ms 869ms
πŸ‡ΊπŸ‡Έ iad 77ms 358ms 767ms
πŸ‡­πŸ‡° hkg 308ms 470ms 959ms
πŸ‡ΏπŸ‡¦ jnb 390ms 522ms 1003ms
πŸ‡¦πŸ‡Ί syd 260ms 347ms 886ms
πŸ‡§πŸ‡· gru 275ms 369ms 705ms

Vercel warm p50 latency between 10. Mar and 13. Mar 2024 aggregated in a 1h window.

Cold - /api/ping/cold

100% UPTIME

0# FAILS

2,010# PINGS

859 ms P50

933 ms P75

1,004 ms P90

1,046 ms P95

1,156 ms P99

Region Trend P75 P95 P99
πŸ‡³πŸ‡± ams 870ms 958ms 1015ms
πŸ‡ΊπŸ‡Έ iad 761ms 822ms 894ms
πŸ‡­πŸ‡° hkg 934ms 1024ms 1073ms
πŸ‡ΏπŸ‡¦ jnb 1016ms 1128ms 1211ms
πŸ‡¦πŸ‡Ί syd 892ms 996ms 1044ms
πŸ‡§πŸ‡· gru 894ms 994ms 1173ms

Vercel cold p50 latency between 10. Mar and 13. Mar 2024 aggregated in a 1h window.

Cold Roulette - /api/ping

100% UPTIME

0# FAILS

6,036# PINGS

305 ms P50

791 ms P75

914 ms P90

972 ms P95

1,086 ms P99

Region Trend P75 P95 P99
πŸ‡³πŸ‡± ams 338ms 872ms 986ms
πŸ‡ΊπŸ‡Έ iad 216ms 777ms 831ms
πŸ‡­πŸ‡° hkg 504ms 948ms 1063ms
πŸ‡ΏπŸ‡¦ jnb 803ms 1027ms 1139ms
πŸ‡¦πŸ‡Ί syd 516ms 914ms 1027ms
πŸ‡§πŸ‡· gru 673ms 916ms 1040ms

Vercel roulette p50 latency between 10. Mar and 13. Mar 2024 aggregated in a 1h window.

Vercel Edge Function

Vercel Edge Functions is using the Edge Runtime. They are deployed globally and executed in a datacenter close to the user.

They have limitations compared to the NodeJs runtime, but they have a faster cold start.

We analyzed the request header and found that the X-Vercel-Id header indicates the request is processed in a datacenter near the user.

Edge - /api/ping/edge

100% UPTIME

0# FAILS

6,042# PINGS

106 ms P50

124 ms P75

152 ms P90

178 ms P95

328 ms P99

Region Trend P75 P95 P99
πŸ‡³πŸ‡± ams 152ms 203ms 373ms
πŸ‡ΊπŸ‡Έ iad 133ms 168ms 259ms
πŸ‡­πŸ‡° hkg 125ms 162ms 272ms
πŸ‡ΏπŸ‡¦ jnb 148ms 210ms 349ms
πŸ‡¦πŸ‡Ί syd 110ms 146ms 347ms
πŸ‡§πŸ‡· gru 144ms 240ms 348ms

Vercel edge p50 latency between 10. Mar and 13. Mar 2024 aggregated in a 1h window.

Conclusion

Runtime p50 p95 p99
Serverless Cold Start 859ms 1,046ms
Serverless Warm 246ms 563ms
Edge 106ms 178ms

Globally Edge functions are approximately 9 times faster than Serverless functions during cold starts, but only 2 times faster when the function is warm.

Edge functions have similar latency regardless of the user's location. If you value your users and have a worldwide audience, you should consider Edge Functions.

You can reproduce this for your own deployment with the website speed test β€” it runs from the same 28 regions and breaks each request into DNS, TCP, TLS, and TTFB, which is how the cold-start gap above becomes visible.

Frequently asked questions

Is Vercel Edge faster than Vercel Serverless?

Yes. In our benchmark from 6 global regions, Edge functions averaged 106ms (P50) vs 246ms for warm Serverless and 859ms for cold Serverless. Edge is about 9x faster during cold starts and 2x faster when warm.

What is the cold start latency of Vercel Serverless functions?

In our test, Vercel Serverless cold starts averaged 859ms (P50), with P95 at 1,046ms and P99 at 1,156ms. Functions were pinged every 30 minutes to ensure they scaled down between requests.

Do Vercel Edge functions have cold starts?

Vercel Edge functions have negligible cold starts. In our benchmark, Edge functions maintained a consistent P50 of 106ms and P99 of 328ms regardless of request frequency, compared to Serverless which jumped from 246ms (warm) to 859ms (cold).

Where are Vercel Serverless functions deployed?

Vercel Serverless functions are deployed in a single region (iad1 β€” Washington, D.C. by default). All requests are routed through a nearby data center before being forwarded to the function's region. Edge functions are deployed globally and execute in the datacenter closest to the user.