Next.js 16 vs Remix
Next.js 16 (Turbopack par défaut, Partial Prerendering) contre Remix (Shopify, standards web) — comparatif des méta-frameworks React en 2026.
La source de Next.js — livre les toutes dernières fonctionnalités sans délai, en zéro configuration
Réseau mondial d'isolats V8 — egress gratuit, désormais avec sa propre couche Next.js, vinext
Tout dépend de ton contexte. Si tu veux les dernières fonctionnalités de Next.js sans délai, choisis Vercel — le risque de parité est nul. Si ton projet est mondial et gourmand en bande passante et que la prévisibilité des coûts prime, Cloudflare est le bon pari ; à côté d'OpenNext, il y a désormais le vinext, plus jeune mais qui évolue vite. Pour un projet critique, commence par OpenNext ; sur un nouveau projet, essaie vinext.
| Catégorie | Vercel | Cloudflare (Workers + Pages) |
|---|---|---|
| Performance | 8/10 | 9/10 |
| Facilité d'apprentissage | 9/10 | 6/10 |
| Écosystème | 9/10 | 7/10 |
| Communauté | 9/10 | 8/10 |
| Marché de l'emploi | 8/10 | 7/10 |
| Pérennité | 8/10 | 8/10 |
// Vercel — Next.js 16 App Router, Cache Components (PPR par défaut) + purge à la demande
// next.config.ts
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
cacheComponents: true,
};
export default nextConfig;
// app/blog/[slug]/page.tsx — données mises en cache via 'use cache' + cacheTag
import { cacheTag } from "next/cache";
async function getPost(slug: string) {
"use cache";
cacheTag(`post-${slug}`);
const res = await fetch(`https://api.example.com/posts/${slug}`);
return res.json();
}
export default async function BlogPost({
params,
}: {
params: Promise<{ slug: string }>;
}) {
const { slug } = await params;
const post = await getPost(slug);
return (
<article>
<h1>{post.title}</h1>
<div dangerouslySetInnerHTML={{ __html: post.html }} />
</article>
);
}
// app/api/revalidate/route.ts — purge à la demande (Vercel Data Cache)
// "max" = stale-while-revalidate ; pour une invalidation immédiate depuis un webhook, utiliser { expire: 0 }
import { revalidateTag } from "next/cache";
import { NextRequest, NextResponse } from "next/server";
export async function POST(req: NextRequest) {
const { slug } = await req.json();
revalidateTag(`post-${slug}`, "max");
return NextResponse.json({ revalidated: true });
}
// vercel.json — région préférée et durée de fonction
{
"regions": ["fra1"],
"functions": {
"app/api/revalidate/route.ts": { "maxDuration": 10 }
}
}
// Déploiement
// $ vercel --prod// Cloudflare — déployer Next.js 16 sur Workers (vinext, voie officielle par défaut)
// 1) Mesurer d'abord la compatibilité, puis ajouter au projet (Vite config générée par vinext init)
// $ npx vinext check
// $ npx vinext init
// vite.config.ts — Workers Cache pour l'ISR au niveau route, KV pour le cache de données
import { cloudflare } from "@cloudflare/vite-plugin";
import { cdnAdapter } from "@vinext/cloudflare/cache/cdn-adapter";
import { kvDataAdapter } from "@vinext/cloudflare/cache/kv-data-adapter";
import { defineConfig } from "vite";
import vinext from "vinext";
export default defineConfig({
plugins: [
vinext({
// cdnAdapter ne fonctionne que si "cache": { "enabled": true } est défini dans wrangler.jsonc
cache: { cdn: cdnAdapter(), data: kvDataAdapter() },
}),
cloudflare({
viteEnvironment: { name: "rsc", childEnvironments: ["ssr"] },
}),
],
});
// Déploiement — la configuration du Worker est générée automatiquement
// $ npx @vinext/cloudflare deploy
// Alternative : adaptateur OpenNext — open-next.config.ts
import { defineCloudflareConfig } from "@opennextjs/cloudflare";
import r2IncrementalCache from "@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache";
export default defineCloudflareConfig({ incrementalCache: r2IncrementalCache });
// $ opennextjs-cloudflare build && opennextjs-cloudflare deploy
// Access for Workers — rattacher le Worker à une application Access
// POST /accounts/{account_id}/access/apps
// "destinations": [{ "type": "worker", "worker_id": "<worker-id>" }]Tout dépend de ton contexte. Si tu veux les dernières fonctionnalités de Next.js sans délai, choisis Vercel — le risque de parité est nul. Si ton projet est mondial et gourmand en bande passante et que la prévisibilité des coûts prime, Cloudflare est le bon pari ; à côté d'OpenNext, il y a désormais le vinext, plus jeune mais qui évolue vite. Pour un projet critique, commence par OpenNext ; sur un nouveau projet, essaie vinext.
Obtenir une consultation gratuitePas totalement, mais on s'en approche : la nouvelle couche vinext de Cloudflare couvre environ 94 % de la surface d'API de Next.js 16 (App Router, Server Actions, ISR, middleware) et constitue désormais la voie officielle par défaut — mais elle reste en bêta ; la documentation recommande d'exécuter `npx vinext check` avant de l'adopter sur une application déjà en production. L'adaptateur plus mature `@opennextjs/cloudflare` présente quant à lui un problème de péremption du cache sur son backend R2 pour l'ISR + Partial Prerendering (issue GitHub ouverte).