
مدوّنتنا
تصفّح مقالات مدوّنتنا حول تصميم وتطوير المواقع والتسويق الرقمي لتبقى على اطّلاع بأحدث التوجّهات والاستراتيجيات.
تم العثور على 101 مقال
لماذا تسبب الخطوط انزياح التخطيط: ملاحظات ميدانية حول next/font و size-adjust ومقاييس الخط الاحتياطي العربي
في موقع ثنائي اللغة نتولى صيانته، كانت الصفحات العربية تتحرك عند كل تحميل بارد بينما ظلت الصفحات الإنجليزية مستقرة. هذه ملاحظاتنا الميدانية حول سبب انزياح التخطيط الناتج عن الخطوط، وما الذي يولّده next/font تلقائياً، وكيف نحسب size-adjust ومحدِّدات القياس الرأسي للعربية بأنفسنا.
لماذا تنكسر الحزمة داخل تطبيق CommonJS: ملاحظات ميدانية حول require(esm) وخريطة exports وخطر الحزمة المزدوجة
نشرنا أداة صغيرة بصيغة ESM فقط، وكان أول من ثبّتها خدمة CommonJS فشلت عند الإقلاع بالخطأ ERR_REQUIRE_ESM. هذه ملاحظاتنا الميدانية حول ما أصلحته فعلاً خاصية require(esm) في Node.js 22.12، وترتيب شروط exports الذي يحل بصمت إلى الملف الخاطئ، وخطر الحزمة المزدوجة الذي يبقى رغم كل ذلك، والأداتين اللتين نشغّلهما قبل كل نشر.
لماذا تكلّف ميزات النماذج اللغوية أكثر مما ينبغي: ملاحظاتنا الميدانية حول التخزين المؤقت للموجّهات ونقاط القطع والطابع الزمني الذي يُفسد كل إصابة
استمرت فاتورة الوحدات الرمزية لأحد وكلائنا في الارتفاع بعد تفعيل التخزين المؤقت للموجّهات، وكشف حقل الاستخدام السبب: كل طلب كان كتابة للذاكرة المؤقتة ولا طلب واحد كان قراءة منها. هذه ملاحظاتنا الميدانية حول الموضع الصحيح لنقطة القطع، والتغييرات التي تُبطل البادئة بصمت، والحساب الذي يحدد الاختيار بين مدة خمس دقائق وساعة كاملة.
لماذا يصبح فحص أنواع TypeScript بطيئًا: ملاحظاتنا الميدانية حول tsgo ومراجع المشاريع وisolatedDeclarations
عندما يتوقف فحص الأنواع عن كونه جزءًا من دورة التطوير السريعة، يكون حدسنا الأول خاطئًا عادةً: المستودع لم يكبر كثيرًا، بل أصبح مليئًا بالأنواع العامة. نشارك كيف نقيس tsc باستخدام --extendedDiagnostics قبل أي تعديل، وكيف نقيّم منفذ TypeScript الأصلي المكتوب بلغة Go واسمه tsgo، ومتى تستحق مراجع المشاريع وisolatedDeclarations عناء الترحيل.
كيف نختبر ميزات النماذج اللغوية: المجموعات الذهبية والنموذج الحَكَم وبوابات التقييم في التكامل المستمر
تعديل بسيط في الموجّه لسبب غير ذي صلة جعل الاستخراج يخترع أرقام طلبات، ومع ذلك نجحت كل الاختبارات لأن لا شيء في التكامل المستمر كان يقرأ ما يقوله النموذج. هذه ملاحظاتنا العملية حول المجموعات الذهبية المبنية على أعطال إنتاج حقيقية، والفحوص الحتمية قبل النموذج الحَكَم، وضبط بوابة البناء على انحدار نسبة النجاح بدل اشتراط الكمال.
لماذا حزمة العميل في Next.js أكبر مما تظن: ملفات البراميل وoptimizePackageImports وحدود 'use client'
توجيه واحد من نوع 'use client' يسحب رسم الاستيراد الكامل للملف إلى حزمة المتصفح، وملف براميل index.ts يعيد تصدير مئتي وحدة هو السبب في تضخم هذا الرسم دون أن يلاحظ أحد. هذه ملاحظاتنا الميدانية عن الاستيراد المباشر وexperimental.optimizePackageImports وsideEffects وقراءة جدول next build بأمانة.
إدارة تركيز لوحة المفاتيح في Next.js App Router: تغيير المسار الذي يفقد التركيز، وinert، وعنصر dialog الأصلي
يُعلن Next.js App Router عن تغيّر المسار لقارئات الشاشة لكنه لا ينقل تركيز لوحة المفاتيح أبدًا. هذه ملاحظاتنا الميدانية حول مكوّن RouteFocus المكوّن من خمسة عشر سطرًا الذي نشحنه في كل مشروع، ومتى نستخدم inert بدل aria-hidden، ولماذا يحبس عنصر dialog الأصلي التركيز فقط عند فتحه بـ showModal().
ترحيل مخطط Postgres دون توقف: نمط التوسيع والتقليص و lock_timeout وطابور الأقفال
نادرًا ما يُسقط ترحيل قاعدة بيانات Postgres التطبيق بسبب بطء أمر DDL نفسه، بل لأن أمر ALTER TABLE ينتظر قفلًا فينتظر خلفه كل استعلام وارد. هذه ملاحظات فريقنا الميدانية عن طوابير الأقفال ونمط التوسيع والتقليص وأوامر DDL التي تعيد كتابة الجدول والتعبئة على دفعات.
تحصين سلسلة إمداد حزم npm في 2026: سكربتات دورة الحياة وإعداد minimumReleaseAge والـ postinstall الذي توقفنا عن الوثوق به
سكربتات دورة الحياة في npm تنفّذ شيفرة عشوائية من الاعتمادات قبل أن يبدأ التطبيق نفسه. هذه ملاحظات فريقنا الميدانية حول تعطيل سكربتات التثبيت افتراضيًا، وإضافة فترة تهدئة زمنية تمنع وصول أي إصدار حديث النشر إلى ملف القفل، وما الذي يثبته إثبات المنشأ في npm وما لا يثبته.
تعدد المستأجرين (Multi-Tenant) في Next.js App Router: ملاحظات ميدانية عن Middleware للنطاقات الفرعية والتسريب الذي رصدناه في الوقت المناسب
نستعرض كيف نبني تطبيقات SaaS متعددة المستأجرين على Next.js App Router: تحديد المستأجر داخل middleware دون طلب قاعدة بيانات لكل زيارة، تخزين مؤقت مخصص لكل مستأجر، وطبقة أمان الصفوف في Postgres التي تحمينا عندما ينسى الكود تحديد النطاق بشكل صحيح.
البحث الهجين في Postgres باستخدام pgvector: ملاحظاتنا الميدانية حول HNSW وtsvector ودمج الترتيب التبادلي
pgvector هو امتداد لـ Postgres يضيف أنواع أعمدة المتجهات وفهارس الجيران الأقرب التقريبية. بنينا عليه خط استرجاع لتطبيق RAG، فلاحظنا أنه يفشل في مطابقة أكواد الأخطاء وأرقام المنتجات الحرفية، وأصلحنا ذلك بدمج تشابه المتجهات مع البحث النصي الكامل في Postgres عبر دمج الترتيب التبادلي. هذه ملاحظاتنا حول HNSW مقابل IVFFlat، وحد الألفي بُعد للفهرسة، وجملة WHERE التي أعادت صفوفاً أقل من الحد المطلوب.
عمّال الويب في موجّه التطبيقات بـ Next.js: ملاحظاتنا الميدانية حول import.meta.url وخطأ DataCloneError وما لا يستطيع العامل إصلاحه
عامل الويب هو خيط جافاسكربت يعمل في الخلفية بلا وصول إلى DOM. نقلنا تحليل ملفات CSV وتغيير حجم الصور وفهرس البحث خارج الخيط الرئيسي في تطبيق يعتمد على موجّه التطبيقات في Next.js — وهنا سبب عودة 404 عند نقل new URL خارج المُنشئ، وسبب وصول كائنات الأصناف بلا توابع، وسبب إنشاء StrictMode لعاملين اثنين.
ابقَ على اطّلاع
اشترك في نشرتنا البريدية للحصول على أحدث الرؤى حول تصميم وتطوير المواقع والتسويق الرقمي.