
مدوّنتنا
تصفّح مقالات مدوّنتنا حول تصميم وتطوير المواقع والتسويق الرقمي لتبقى على اطّلاع بأحدث التوجّهات والاستراتيجيات.
تم العثور على 101 مقال
إطلاق أعلام الميزات في Next.js باستخدام Vercel Flags SDK
نقلنا أعلام الميزات المخصّصة القائمة على متغيرات البيئة لدى أحد عملائنا إلى Flags SDK ونمط precompute. إليكم كيف بدت عملية النقل ولماذا كان الرندر الثابت هو الجزء الذي يستحق الحماية.
الترحيل من vercel.json إلى vercel.ts: ما تعلمناه من إعدادات Vercel المكتوبة بـ TypeScript
يستبدل vercel.ts ملف vercel.json بملف إعدادات TypeScript قابل للتنفيذ ومزوّد بالأنواع. هذا ما واجهناه عند ترحيل مشاريع العملاء، من أخطاء إملائية تم اكتشافها إلى خلل في ثبات الإعدادات سببه Date.now().
انتهاء دعم Node.js 20 على Vercel: ترحيلنا إلى Node 24 LTS
انتهى دعم Node.js 20 على Vercel في 1 أكتوبر 2026. هذا ما تعطّل فعليًا عندما رحّل فريقنا عدة مشاريع إنتاجية إلى Node 24 LTS — ولم يكن كود التطبيق.
ترحيل المشاريع من Edge Runtime في Vercel: ملاحظات ميدانية
بيئة Edge Runtime في Vercel أصبحت قيد الإيقاف التدريجي لصالح Node.js على Fluid Compute — إليكم ما وجدناه أثناء ترحيل مسارات Next.js، ولماذا استمر البث بالعمل دون أي تغيير.
لماذا مسح تبويبان تعديلات بعضهما بصمت: ملاحظات ميدانية عن التحديثات المفقودة وأعمدة الإصدار وETag
أعدنا إنتاج خلل يمحو فيه تبويبان يعدّلان السجل نفسه تغييرات بعضهما بصمت، دون أي خطأ. هذه ملاحظاتنا الميدانية عن سبب عجز معاملات قاعدة البيانات عن منع التحديثات المفقودة عبر طلبات HTTP، وكيف يعالجها عمود إصدار وترويستا ETag وIf-Match وشاشة تعارض واضحة.
لماذا لا يوقف موجّه نظام أفضل حقنَ الأوامر: ملاحظاتنا الميدانية حول الثلاثية القاتلة والأدوات محددة الصلاحيات والمخرجات غير الموثوقة
أثناء بناء مساعد لصندوق الدعم يملك صلاحية استدعاء الأدوات، أدخل فريقنا تذكرة اختبار تحتوي على تعليمات مخفية، فنفّذ النموذج بعضها. هذه ملاحظاتنا الميدانية حول سبب كون حقن الأوامر مشكلة معمارية لا مشكلة صياغة، وكيف تكشف الثلاثية القاتلة ميزات الذكاء الاصطناعي الخطرة، وكيف نقيّد الأدوات بصلاحيات المستخدم المسجّل، ولماذا تحتاج الآثار الجانبية إلى تأكيد بشري، وكيف يتحول عرض Markdown إلى قناة لتسريب البيانات.
حين تجعل إعادة المحاولة العطل أسوأ: مفاتيح عدم التكرار، والتراجع مع التشويش، وقواطع الدائرة
إعادة المحاولة الساذجة تضاعف الحِمل على خدمة تعاني أصلاً. نشرح تضخيم إعادة المحاولة، وأي أخطاء HTTP آمنة للتكرار، وكيف نطبّق ترويسة Idempotency-Key بقيد فريد بدل القراءة ثم الكتابة، ولماذا يتفوّق التشويش الكامل على التراجع الثابت، ومتى يستحق قاطع الدائرة تعقيده.
لماذا يصبح الترقيم بـ OFFSET أبطأ مع كل صفحة: مؤشرات keyset ومفاتيح الترتيب المستقرة والفهرس الذي يجعلها تعمل
استبدلنا الترقيم بـ OFFSET في واجهة إنتاجية بعدما بدأت الصفحات العميقة تتجاوز مهلة الاستجابة. هذه ملاحظاتنا الهندسية حول سبب كون تكلفة OFFSET متناسبة مع عمق الصفحة، وكيف تحوّل مؤشرات keyset الترقيم إلى بحث مباشر داخل الفهرس، وأي فهرس مركّب يحتاجه الاستعلام، وخطأ دقة الطوابع الزمنية الذي جعل مؤشراتنا تتخطى صفوفًا.
لماذا يكسر النشر كل تبويب مفتوح: ملاحظات ميدانية حول ChunkLoadError وانحراف الإصدارات
قد يملأ نشر روتيني واحد سجل الأخطاء برسائل ChunkLoadError قادمة من جلسات فتحت الصفحة قبل دقائق. هذه ملاحظاتنا الميدانية حول سبب كون انحراف الإصدارات عدم تطابق بين العميل والخادم لا خللاً في أداة التجميع، والطبقات الأربع التي يكسرها، وكيف يبقي خيار deploymentId في Next.js وخاصية Skew Protection في Vercel البناءات القديمة قابلة للوصول، وكيف نبني مسار تعافٍ في المتصفح يعيد التحميل مرة واحدة فقط.
لماذا تنجح اختبارات Playwright محليًا وتفشل في CI: ملاحظاتنا الميدانية حول الانتظار التلقائي وعزل الاختبارات والتصحيح عبر التتبّع
كانت مجموعات الاختبارات الشاملة لدينا خضراء على أجهزة المطورين وحمراء بشكل متقطع على CI. هذه ملاحظاتنا الميدانية حول كون التذبذب في Playwright حالة تسابق داخل الاختبار وليس عشوائية في المتصفح، وكيف تحل التوكيدات web-first محل كل انتظار ثابت، وكيف تمنع الـ fixtures على مستوى العامل مشاركة البيانات، ولماذا يُعد trace: 'on-first-retry' أهم سطر في ملف الإعداد.
لماذا يستمر استهلاك الذاكرة في عمليات Node بالارتفاع: ملاحظات ميدانية عن لقطات الكومة والكاش في نطاق الوحدة والتسريبات التي تظهر عند إعادة استخدام النسخ
خدمة Node تبقى بصحة جيدة لساعة بعد كل نشر ثم يبدأ استهلاكها بالارتفاع تعني تسريباً فوق الطلب لا داخله. هذه ملاحظاتنا الميدانية حول التفريق بين تسريب حقيقي وتذبذب جمع المهملات، والتقاط لقطات الكومة عبر --heapsnapshot-signal، وقراءة لوحة Retainers وصولاً إلى Map في نطاق الوحدة، ولماذا تجعل إعادة استخدام النسخ في Fluid Compute الكود بلا خادم يتسرب كخادم طويل العمر.
لماذا لا تنجح ذاكرة CDN أبدًا: ملاحظاتنا الميدانية حول Cache-Control وs-maxage وstale-while-revalidate
كانت نقطة نهاية JSON عامة تصل إلى الخادم الأصلي في كل طلب بينما بدت إعدادات CDN صحيحة. هذه ملاحظاتنا الميدانية حول قراءة ترويسات x-vercel-cache وAge بدلًا من لوحات التحكم، والفرق بين max-age وs-maxage وstale-while-revalidate، ومتى تتفوق CDN-Cache-Control على ترويسة Cache-Control وحدها، والحالات الخمس التي تُعطّل التخزين على الحافة بصمت.
ابقَ على اطّلاع
اشترك في نشرتنا البريدية للحصول على أحدث الرؤى حول تصميم وتطوير المواقع والتسويق الرقمي.