
لا يمكن لطلب API مدته 700 ثانية أن يكتمل بصورة موثوقة داخل بيئة بناء حدّها 600 ثانية. تعرّف على تحديد المهلة الحقيقية، وضبط الميزانيات، وإعادة المحاولة بأمان، ونقل العمل الطويل خارج مسار النشر.
قد يبدو النشر بسيطاً: يجلب البناء بيانات من واجهة API ثم يحوّلها وينتج صفحات ثابتة. لكن إذا سُمح للطلب بالانتظار 700 ثانية بينما توقف المنصة البناء عند 600 ثانية، فالنتيجة محسومة قبل أن يبدأ الطلب.
هذه ليست مشكلة عشوائية. إنها تعارض بين المهل الزمنية. والأسوأ أن طلب البيانات ليس العمل الوحيد داخل البناء؛ فالتثبيت، والترجمة، وكتابة المخرجات ورفعها تستهلك من الحد نفسه.
توجد عادة طبقات متعددة من المهلات:
| الطبقة | مثال |
|---|---|
| الحد الأقصى للبناء في المنصة | 600 ثانية |
| مهمة CI | 15 دقيقة |
| مهلة جلب البيانات في الإطار | 60 ثانية |
| مهلة عميل HTTP | 700 ثانية |
| وكيل أو API خارجي | 30 ثانية |
أصغر مهلة قابلة للتطبيق هي التي تنهي العملية. تغيير مهلة العميل إلى 700 ثانية لا يمدد منصة تقتل العملية عند 600 ثانية.
قبل رفع رقم المهلة، سجل وقت بداية البناء، وبداية الطلب، ووقت أول بايت، وحالة HTTP، ومعرّف الطلب لدى الخدمة، وعدد المحاولات، والطبقة التي أصدرت رسالة الفشل. استخدم معرّف ربط يصل إلى الـ API، ولا تسجل الرموز أو الترويسات الحساسة.
لا تمنح طلباً واحداً الحد الكامل للبناء. احتفظ بوقت للتثبيت ورفع المخرجات وللتعافي عند الخطأ، ثم أعط كل استدعاء خارجي مهلة أصغر وصريحة.
async function fetchJson(url, { timeoutMs = 15_000, ...options } = {}) {
const response = await fetch(url, {
...options,
signal: AbortSignal.timeout(timeoutMs),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
return response.json();
}
إن كان لدى المستدعي إشارة إلغاء أصلاً، اجمعها مع مهلة الطلب باستخدام AbortSignal.any() بدلاً من استبدالها.
تفيد إعادة المحاولة للأخطاء العابرة ولبعض أخطاء الخادم أو الحصص. لكنها تضر عندما تجعل طلباً محكوماً بالفشل ينتظر ثلاث مرات. أعد المحاولة فقط للعمل الآمن الإعادة، للأخطاء القابلة للتعافي، وضمن مهلة إجمالية تشمل الانتظار المتزايد والتشويش العشوائي.
عندما يكون الاستدعاء أطول من نافذة النشر، لا يكون رفع المهلة حلاً. اختر تصميماً يخرج العمل الطويل من مسار البناء:
قد تكون مناسبة لمهمة نادرة ومعروفة المدة عندما تسمح كل الطبقات الخارجية بذلك. لكنها ليست مناسبة لمصدر خارجي بطيء في كل بناء، أو لمسار مستخدم مباشر، أو لمنصة ذات حد ثابت أصغر.
طلب مدته 700 ثانية داخل بيئة حدها 600 ثانية هو إشارة تصميم، لا مشكلة ضبط رقم. اجعل البيانات أسرع، أو اقبل لقطة مخبأة، أو نفذ العمل البطيء في مكان آخر. عندما تملك كل طبقة ميزانية واقعية، تصبح عمليات النشر قابلة للتنبؤ.
لا توجد تعليقات معتمدة بعد. قد تنتظر الردود الجديدة المراجعة.