I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تعمل Dynamic A/B Testing احترافي في Next.js باستخدام الـ Middleware

إزاي تعمل Dynamic A/B Testing احترافي في Next.js باستخدام الـ Middleware أكيد مريت بالموقف ده: العميل أو الـ Product Manager طلبوا منك تجرب نسختين من الصفحة الر

إزاي تعمل Dynamic A/B Testing احترافي في Next.js باستخدام الـ Middleware
Reading Count: 1

إزاي تعمل Dynamic A/B Testing احترافي في Next.js باستخدام الـ Middleware

أكيد مريت بالموقف ده: العميل أو الـ Product Manager طلبوا منك تجرب نسختين من الصفحة الرئيسية عشان تشوف مين فيهم بتجيب مبيعات أكتر (Conversion Rate). أول حاجة بتيجي في بالك هي المكتبات الخارجية أو الـ Client-side Redirects، بس بتكتشف إنها بتعمل فلاش (Flash) مزعج للمستخدم أو بتأثر على الـ SEO. النهاردة هعلمك إزاي تعمل اختبارات أ/ب (A/B Testing) بشكل احترافي باستخدام الـ Middleware في Next.js، يعني أداء سريع جداً وتجربة مستخدم مفيش أحلى من كده.

ليه الـ Middleware هو الحل السحري؟

الـ Middleware في Next.js بيشتغل قبل ما الـ Request يوصل للـ Page أو الـ API route. ده معناه إننا نقدر ناخد قرار التوجيه (Redirect) قبل ما السيرفر يبدأ حتى يحضر الصفحة. مفيش أي انتظار، مفيش تحميل لصفحة وبعدين تحويل، ومفيش "رعشة" في المتصفح. إحنا بنحدد تجربة المستخدم وهو لسه في "مدخل" الموقع.

الخطوات العملية لتنفيذ الـ Dynamic A/B Testing

عشان نبدأ، محتاجين نفكر في المنطق: إحنا عاوزين نشوف لو المستخدم عنده Cookie معينة، لو موجودة، هنوجهه للنسخة اللي كان عليها. لو مش موجودة، هنرمي "عملة" (Randomly) ونقرر هل هيدخل النسخة A أو B، ونحفظ ده فوراً في الـ Cookie عشان يفضل على نفس النسخة لما يرجع.

كود الـ Middleware للتنفيذ

شوف معايا الكود البسيط ده اللي هيغير مجرى شغلك:

import { NextResponse } from 'next/server'; export function middleware(request) { const response = NextResponse.next(); const abCookie = request.cookies.get('ab-test-group'); if (abCookie) return response; const group = Math.random() > 0.5 ? 'group-b' : 'group-a'; const url = request.nextUrl.clone(); url.pathname = `/${group}${url.pathname}`; const res = NextResponse.rewrite(url); res.cookies.set('ab-test-group', group); return res; }

شرح الكود ببساطة

  • Check Cookie: أول حاجة بنشوف الـ Cookie اللي اسمها ab-test-group. لو موجودة، بنسيب المستخدم في حاله عشان التجربة تكون ثابتة (Consistent).
  • Random Logic: لو مفيش Cookie، بنقرر عشوائياً هو هيروح لـ group-a أو group-b.
  • Rewrite: هنا السحر، بنستخدم NextResponse.rewrite عشان نغير المسار داخلياً من غير ما الـ URL في المتصفح يتغير، وده بيحافظ على الـ SEO وبيديك سرعة صاروخية.
  • Set Cookie: بنحفظ القرار في الـ Cookie عشان المرة الجاية المستخدم يدخل على نفس النسخة اللي شافها أول مرة.

نصايح لرفع مستوى الأداء (Optimization Tips)

عشان تكون محترف فعلاً، خلي بالك من النقط دي:

  • Server Side Rendering (SSR): اتأكد إن الـ Pages عندك بتتعامل مع الـ Path ده بشكل سليم.
  • Analytics Integration: متنساش تبعت الـ Group اللي المستخدم وقع فيه لأدوات التحليل زي Google Analytics عشان تقدر تقارن الأداء فعلياً.
  • Caching: لو بتستخدم Edge Cache، خلي بالك إن الـ Middleware بيأثر على الكاشينج، فاستخدم الـ Vary Header بشكل صحيح.

خاتمة ونصيحة من أخ

يا صديقي، الـ Next.js مش مجرد إطار عمل (Framework)، ده بيئة متكاملة لو فهمت الـ Middleware بتاعها كويس، هتحل مشاكل معقدة في ثواني. نصيحتي ليك: متكتفيش بالـ A/B Testing البسيط، جرب تعمل Feature Flags بنفس الطريقة، هتخليك تطلق ميزات جديدة لنسبة معينة من المستخدمين وتتحكم في المنتج بتاعك كأنك ملك. الاستمرارية في التعلم هي اللي بتصنع المبرمج الشاطر، كمل في طريقك!


Share

Related posts

Jun 29, 2026 • 1 min read
Reading Count: 5
تصميم واجهات الزجاج (Glassmorphism) باحترافية باستخدام CSS الحديثة

تصميم واجهات الزجاج (Glassmorphism) باحترافية باستخدام CSS الحديثة أهلاً بك يا صديقي المبرمج. أكيد و...

Jun 29, 2026 • 1 min read
Reading Count: 10
بناء تطبيقات الوقت الحقيقي (Real-time) خفيفة الوزن باستخدام SSE كبديل للـ WebSockets

بناء تطبيقات الوقت الحقيقي (Real-time) خفيفة الوزن باستخدام SSE كبديل للـ WebSockets كثير مننا كمبرم...

Jun 28, 2026 • 1 min read
Reading Count: 13
احتراف الـ Caching في الـ APIs باستخدام Redis Tags وتقنيات الـ Invalidation

احتراف الـ Caching في الـ APIs باستخدام Redis Tags وتقنيات الـ Invalidation أكيد مريت بالموقف ده: عن...