Next.js 16 vs Remix
Next.js 16 (Turbopack default, Partial Prerendering) vs Remix (Shopify, web standards) — React meta-framework karşılaştırması 2026.
Next.js'in kaynağı — sıfır-konfigürasyonla en yeni özellikleri gecikmesiz sun
Küresel V8-isolate ağı — sıfır egress, artık kendi Next.js katmanı vinext ile
Duruma göre karar ver. En yeni Next.js özelliklerini gecikmesiz istiyorsan Vercel'i seç — parite riski sıfır. Bant genişliği ağır, küresel bir projedeysen ve maliyet öngörülebilirliğini önceliklendiriyorsan Cloudflare doğru bahis; OpenNext'in yanında artık beta ama hızlı gelişen vinext de var. Kritik işte OpenNext'le başla, yeni projede vinext'i dene.
| Kategori | Vercel | Cloudflare (Workers + Pages) |
|---|---|---|
| Performans | 8/10 | 9/10 |
| Öğrenme Kolaylığı | 9/10 | 6/10 |
| Ekosistem | 9/10 | 7/10 |
| Topluluk | 9/10 | 8/10 |
| İş Pazarı | 8/10 | 7/10 |
| Gelecek | 8/10 | 8/10 |
// Vercel — Next.js 16 App Router, Cache Components (PPR varsayılan) + on-demand purge
// next.config.ts
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
cacheComponents: true,
};
export default nextConfig;
// app/blog/[slug]/page.tsx — 'use cache' + cacheTag ile önbelleklenen veri
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 — on-demand purge (Vercel Data Cache)
// "max" = stale-while-revalidate; webhook'ta anında düşürmek için { 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 — bölge tercihi ve fonksiyon süresi
{
"regions": ["fra1"],
"functions": {
"app/api/revalidate/route.ts": { "maxDuration": 10 }
}
}
// Deploy
// $ vercel --prod// Cloudflare — Next.js 16'yı Workers'a deploy (vinext, resmi varsayılan yol)
// 1) Önce uyumluluğu ölç, sonra projeye ekle (Vite config'ini vinext init üretir)
// $ npx vinext check
// $ npx vinext init
// vite.config.ts — route-level ISR için Workers Cache, veri cache'i için KV
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 yalnız wrangler.jsonc'de "cache": { "enabled": true } iken çalışır
cache: { cdn: cdnAdapter(), data: kvDataAdapter() },
}),
cloudflare({
viteEnvironment: { name: "rsc", childEnvironments: ["ssr"] },
}),
],
});
// Deploy — Worker konfigürasyonunu kendisi üretir
// $ npx @vinext/cloudflare deploy
// Alternatif: OpenNext adaptörü — 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 — Worker'ı Access uygulamasına bağla
// POST /accounts/{account_id}/access/apps
// "destinations": [{ "type": "worker", "worker_id": "<worker-id>" }]Duruma göre karar ver. En yeni Next.js özelliklerini gecikmesiz istiyorsan Vercel'i seç — parite riski sıfır. Bant genişliği ağır, küresel bir projedeysen ve maliyet öngörülebilirliğini önceliklendiriyorsan Cloudflare doğru bahis; OpenNext'in yanında artık beta ama hızlı gelişen vinext de var. Kritik işte OpenNext'le başla, yeni projede vinext'i dene.
Ücretsiz Danışmanlık AlTam değil ama yakın: Cloudflare'in yeni vinext katmanı Next.js 16 API yüzeyinin ~%94'ünü (App Router, Server Actions, ISR, middleware) destekliyor ve resmi varsayılan yol — ama hâlâ beta; doküman, mevcut bir production uygulamasında benimsemeden önce `npx vinext check` çalıştırmanı söylüyor. Daha olgun `@opennextjs/cloudflare` adaptörü ise ISR+Partial Prerendering'in R2 cache backend'inde bir bayatlama sorunu (açık GitHub issue) taşıyor.