Next.js 16 vs Remix
Next.js 16 (بـ Turbopack كافتراضي وPartial Prerendering) مقابل Remix (من Shopify، قائم على معايير الويب) — مقارنة بين أطر عمل React الفوقية (meta-frameworks) لعام 2026.
مصدر Next.js — قدّم أحدث الميزات دون تأخير وبتهيئة صفرية
شبكة V8-isolate عالمية — بدون egress، والآن مع طبقة Next.js الخاصة بها vinext
القرار يعتمد على وضعك. إذا كنت تريد أحدث ميزات Next.js دون أي تأخير، اختر Vercel — مخاطرة التكافؤ فيها صفر. إذا كان مشروعك عالميًا وثقيل النطاق الترددي وتُعطي الأولوية لإمكانية التنبؤ بالتكلفة، فـ Cloudflare هو الرهان الصحيح؛ إلى جانب OpenNext يوجد الآن vinext الذي لا يزال في مرحلة beta لكنه يتطور بسرعة. ابدأ بـ OpenNext في العمل الحرج، وجرّب vinext في المشروع الجديد.
| الفئة | Vercel | Cloudflare (Workers + Pages) |
|---|---|---|
| الأداء | 8/10 | 9/10 |
| سهولة التعلّم | 9/10 | 6/10 |
| النظام البيئي | 9/10 | 7/10 |
| المجتمع | 9/10 | 8/10 |
| سوق العمل | 8/10 | 7/10 |
| الاستدامة المستقبلية | 8/10 | 8/10 |
// Vercel — Next.js 16 App Router، مكوّنات Cache (PPR افتراضي) + 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
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 عند الطلب (Vercel Data Cache)
// "max" = stale-while-revalidate؛ للإسقاط الفوري في webhook استخدم { 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 — تفضيل المنطقة ومدة الدالة
{
"regions": ["fra1"],
"functions": {
"app/api/revalidate/route.ts": { "maxDuration": 10 }
}
}
// نشر (Deploy)
// $ vercel --prod// Cloudflare — نشر Next.js 16 على Workers (vinext، الطريق الرسمي الافتراضي)
// 1) قِس التوافق أولًا، ثم أضفه للمشروع (vinext init يُنشئ إعداد Vite)
// $ npx vinext check
// $ npx vinext init
// vite.config.ts — Workers Cache لـ ISR على مستوى route، و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 فقط عندما يكون "cache": { "enabled": true } في wrangler.jsonc
cache: { cdn: cdnAdapter(), data: kvDataAdapter() },
}),
cloudflare({
viteEnvironment: { name: "rsc", childEnvironments: ["ssr"] },
}),
],
});
// نشر — يُنشئ تهيئة Worker بنفسه
// $ npx @vinext/cloudflare deploy
// بديل: محول 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 — ربط Worker بتطبيق Access
// POST /accounts/{account_id}/access/apps
// "destinations": [{ "type": "worker", "worker_id": "<worker-id>" }]القرار يعتمد على وضعك. إذا كنت تريد أحدث ميزات Next.js دون أي تأخير، اختر Vercel — مخاطرة التكافؤ فيها صفر. إذا كان مشروعك عالميًا وثقيل النطاق الترددي وتُعطي الأولوية لإمكانية التنبؤ بالتكلفة، فـ Cloudflare هو الرهان الصحيح؛ إلى جانب OpenNext يوجد الآن vinext الذي لا يزال في مرحلة beta لكنه يتطور بسرعة. ابدأ بـ OpenNext في العمل الحرج، وجرّب vinext في المشروع الجديد.
احصل على استشارة مجانيةليس بشكل كامل لكنه قريب جدًا: طبقة vinext الجديدة من Cloudflare تدعم حوالي %94 من سطح واجهة برمجة تطبيقات Next.js 16 (App Router وServer Actions وISR وmiddleware) وهي الطريق الرسمي الافتراضي — لكنها لا تزال في مرحلة beta؛ يقول التوثيق إنه يجب تشغيل `npx vinext check` قبل اعتمادها في تطبيق production قائم. أما محول `@opennextjs/cloudflare` الأكثر نضجًا فيحمل مشكلة تقادم (bayatlama) في backend الخاص بـ R2 cache لـ ISR+Partial Prerendering (مشكلة مفتوحة على GitHub).