حدود المعدّل
الحدّ الأدنى لكل عنوان IP، والسقف لكل موقع، والحدود الأضيق على عمليات الكتابة، وما يشتريه المفتاح السرّي، وكيف تعالج 429.
الحدود قائمة على ثلاثة مستويات في آن واحد، وعلى الطلب أن يجتازها جميعًا. وكل عدّ هو لكل عنوان IP ما لم يقل السطر غير ذلك، والنافذة متحرّكة لا نافذة دقيقة التقويم.
الحدّ الأدنى
| النطاق | الحدّ |
|---|---|
كل مسارات /api/public/*، لكل عنوان IP | ١٢٠ طلبًا / دقيقة |
كل مسارات /api/public/*، لكل موقع | ٦٠٠ طلب / دقيقة |
السقف لكل موقع يحمي قاعدة بيانات مستأجر من كاشط مستأجر آخر: الكاشط يملك عناوين كثيرة، والموقع يملك معرّفًا واحدًا.
والنداء الموثّق بمفتاح سرّي (sk_…) يحصل على خمسة أضعاف الرقمين — ٦٠٠ في
الدقيقة لكل IP و٣٠٠٠ في الدقيقة لكل موقع. وهذا هو الفرق بين متصفّح وخادمك: الأول
زوّار كثيرون، والثاني برنامج واحد تتحكّم فيه.
الحدود على عمليات الكتابة
الحدّ الأدنى أرضيّة فقط. أما المسارات التي يستحقّ طحنها فلها سقوفها الأضيق — لكل عنوان IP، حتى لا يستهلك زائر واحد ميزانية موقع كامل.
| المسار | الحدّ |
|---|---|
POST /public/leads | ٥ / ١٠ دقائق |
POST /public/viewing-requests | ٥ / ١٠ دقائق |
POST /public/auth/register | ٥ / ١٠ دقائق |
POST /public/auth/verify-otp | ١٠ / ١٠ دقائق |
POST /public/auth/resend-otp | ٣ / ١٠ دقائق |
POST /public/auth/login | ١٠ / ١٠ دقائق |
POST /public/auth/forgot-password | ٣ / ١٠ دقائق |
POST /public/auth/reset-password | ٥ / ١٠ دقائق |
POST /public/newsletter | ٥ / ١٠ دقائق |
POST /public/search | ٦٠ / دقيقة |
POST /public/properties/{id}/view | ٦٠ / دقيقة |
POST /public/me/saved-searches | ٢٠ / ١٠ دقائق |
PUT وDELETE /public/me/favorites/… | ٣٠ / دقيقة |
أما مسارات القراءة فيغطّيها الحدّ الأدنى وحده.
ماذا يعني هذا لصفحاتك
- صفحة وحدة تسجّل مشاهدة مع كل تصيير لا بأس بها عند ٦٠ في الدقيقة، لكن لا إن سجّلت واحدة مع كل تنقّل في المتصفّح أيضًا. سجّل مشاهدة واحدة لكل وحدة في الزيارة وامنع التكرار محليًّا.
- البحث أثناء الكتابة يجب أن يُهدَّأ. ٦٠ بحثًا في الدقيقة هو واحد في الثانية؛ وحقل يرسل طلبًا مع كل ضغطة يتجاوز ذلك في جملة واحدة.
- لا تُعِد أي كتابة فاشلة تلقائيًّا. نموذج استفسار يعيد المحاولة عند الخطأ سيبلغ «٥ في ١٠ دقائق» ثم يبدو معطّلًا أمام شخص حقيقي.
- الصفحات المصيّرة على الخادم تتشارك عنوانًا واحدًا — عنوان خادمك. ولهذا وُجدت
حدود المفتاح السرّي الأعلى، فاضبط
SITE_SECRET_KEYفي أي نشر يصيّر على الخادم. وخزّن مؤقتًا ما تستطيع (next: { revalidate }) بدل إعادة جلب الكتالوج نفسه مع طلب كل زائر.
معالجة 429
الرفض هو HTTP 429 بلا code في الجسم — الحالة نفسها هي الإشارة.
if (res.status === 429) {
// ليس خطأً في كودك. اعرض رسالة «حاول بعد لحظات»، وأبقِ النموذج مملوءًا،
// ودَعِ الشخص يضغط الزرّ مرّة أخرى.
return { tooMany: true };
}تراجَع بدل إعادة المحاولة، واحتفظ بما كتبه الزائر، وأعِد تفعيل الزرّ بعد مهلة. وفي الكتابة تحديدًا تكون إعادة المحاولة الصامتة أسوأ من عديمة النفع: فقد تكون المحاولة الأولى نجحت قبل أن يرفض الحدّ الثانية.
تُحسب الحدود على عنوان العميل الحقيقي المستخرَج من الوسيط أمام الواجهة. لذلك يتشارك الزوّار خلف شبكة مكتب واحد أو خلف NAT مشغّل جوّال دلوًا واحدًا في الحدود الضيّقة للكتابة — وهذا سبب آخر لإبقاء نموذج الاستفسار على إرسال واحد.