ملفات FastAPI الثابتة على Vercel: كيف يخفض CDN استهلاك Functions

تعرّف إلى طريقة نقل Vercel لملفات FastAPI الثابتة إلى CDN، وما الذي ينخفض في استهلاك Functions والفاتورة، وما يبقى محسوبًا من الطلبات ونقل البيانات.

Sunday, September 13, 2026Omid Saffari
Tools
ملفات FastAPI الثابتة على Vercel: كيف يخفض CDN استهلاك Functions

غيّرت Vercel بندًا واحدًا في فاتورة تطبيقات FastAPI في 10 سبتمبر 2026. فطلبات الواجهة الأمامية وملفات FastAPI الثابتة المؤهلة تنتقل الآن من شبكة CDN التابعة لـ Vercel مباشرة إلى الزائر، فلا تعود تولّد استدعاءات Function أو تستهلك موارد الحوسبة. لكن طلبات CDN ونقل البيانات يظلان قائمين؛ لذلك يخفض هذا التغيير استهلاك Function، ولا يجعل تقديم الملفات الثابتة مجانيًا.

كيف تتجاوز ملفات FastAPI الثابتة الـ Function الآن؟

الملف الثابت هو ملف يستطيع الخادم إرساله كما هو، مثل ملف HTML أو ورقة أنماط أو حزمة JavaScript أو خط أو صورة. أما Vercel Function فهي عملية FastAPI قيد التشغيل التي تتولى الطلبات الديناميكية، في حين تمثل CDN طبقة التوصيل القريبة من الزائر.

قبل هذا التغيير، كان الملف المتاح عبر نقطة تثبيت FastAPI قد يسلك مسار Function رغم طبيعته الثابتة. يصل الطلب إلى شبكة Vercel، ويستدعي FastAPI Function، ثم تعيد Python الملف.

أما الآن، فتكتشف Vercel أثناء البناء الملفات المؤهلة التي يقدّمها app.frontend() وStaticFiles في FastAPI. ثم تنقلها إلى CDN، فتُلبّى الطلبات المطابقة من دون استدعاء Function.

وهكذا يتغير المسار من:

visitor → CDN → FastAPI Function → file → visitor

إلى:

visitor → CDN file → visitor

هذا لا يحوّل API الديناميكية إلى ملفات ثابتة؛ فالانتقال يقتصر على الملفات المطابقة. كذلك كانت الملفات الموجودة في مجلد public/ على مستوى المشروع تُقدَّم أصلًا من CDN، لذا لن تحقق التطبيقات التي تضع جميع أصولها العامة هناك وفرًا جديدًا من هذا الإصدار.

وتظل المجلدات المنقولة إلى CDN داخل حزمة Function افتراضيًا. يؤدي ضبط tool.vercel.fastapi.static.exclude = true إلى حذف النسخة المكررة، لكنه قرار مستقل يخص الحزمة. ولا يلزم تفعيله كي يعمل مسار الطلب عبر CDN.

مقطع معماري يوضح المسار القصير لأصول FastAPI العامة من الزائر عبر CDN، بينما تمر الأصول المحمية عبر Function وحاجز الحماية
يمكن للأصول العامة أن تتوقف عند CDN، أما الأصول المحمية فتظل بحاجة إلى Function عندما يتعين على FastAPI فحص الطلب.

ما ينخفض من الفاتورة هو الحوسبة، لا التوصيل

تقيس Vercel الطلب عبر طبقات متعددة. يحصي Function Invocations الطلبات التي تصل إلى شيفرتك، بينما يقيس Active CPU وProvisioned Memory العمل وموارد وقت التشغيل المرتبطة بتلك الاستدعاءات. أما Fast Origin Transfer فيقيس حركة البيانات بين CDN وFunction.

مقاييس التوصيل الخارجية مختلفة. ينطبق مقياس CDN Requests، الذي يظهر باسم Edge Requests في لوحة التحكم، على الأصول الثابتة وحركة Function معًا. ويقيس Fast Data Transfer وحدات البايت المرسلة بين CDN والزائر.

فيما يلي الحساب الواضح لمليون طلب متطابق للأصول: كانت هذه الطلبات تصل إلى Function قبل النشر، ثم أصبحت مؤهلة للرفع بعده.

المقياسقبل الرفعبعد الرفع
Function Invocations1 مليون0
Active CPU لهذه الطلباتيُقاس0
Provisioned Memory لهذه الطلباتيُقاس0
Fast Origin Transfer لهذه الاستجاباتيُقاس0
CDN Requests أو Edge Requests1 مليون1 مليون
Fast Data Transfer إلى الزواروحدات بايت مقاسةوحدات بايت مقاسة

السعر المنشور لخطة Pro هو $0.60 لكل مليون استدعاء Function. لذلك يؤدي خروج مليون طلب ملف كان يصل سابقًا إلى Function إلى حذف $0.60 من إجمالي استهلاك الاستدعاءات قبل الرصيد الشهري، إضافة إلى ما كانت تستهلكه فعليًا من Active CPU وProvisioned Memory وFast Origin Transfer.

أما الجزء الأخير فلا يمكن تحديده إلا من بيانات Usage لديك. فالاستجابة التي لا تكاد تشغّل Python لن توفر كثيرًا من CPU، بينما قد تزيل الاستجابة الكبيرة قدرًا أكبر من نقل البيانات من المصدر. يمنحك الإصدار مسارًا جديدًا، لا نسبة توفير عامة تصلح للجميع.

يبقى استهلاك CDN في الجانب الآخر من الحساب. تذكر صفحة تسعير CDN الحالية لدى Vercel أن أول 10 ملايين من Edge Requests وأول 1 TB من Fast Data Transfer مشمولة في Pro عند الفوترة حسب الطلب، ثم تُطبَّق أسعار استهلاك تختلف باختلاف المنطقة. أما الفرق التي تستخدم Flat Rate CDN فتستهلك سعة الطلبات والنقل المخصصة لتلك الخطة. ويشرح دليل Flat Rate CDN قرار الميزانية المنفصل هذا.

في خطة Hobby قد تظهر الفائدة في هامش استخدام أكبر بدلًا من فاتورة نقدية أصغر. تشمل الخطة مليون استدعاء Function، وأربع ساعات Active CPU، و360 GB-hours من Provisioned Memory. تتوقف حركة الملفات العامة التي لم تعد تصل إلى Function عن استهلاك هذه الحصص، بينما يظل توصيلها عبر CDN محسوبًا حيثما ينطبق.

الأهلية تحكمها قواعد المسارات والأمان

تحافظ Vercel على ترتيب التصريح في FastAPI عند استخدام StaticFiles. فإذا صُرّح عن مسار قبل تثبيت الملفات الثابتة على العنوان نفسه، تكون له الأولوية ويصل إلى Function. أما المسار المعلن بعد التثبيت فتسبقه نسخة الملف الموجودة على CDN.

يتصرف app.frontend() بطريقة مختلفة قليلًا. فمسارات API تتقدم دائمًا على ملفات الواجهة الأمامية، بصرف النظر عن ترتيب التصريح. وبهذا لا تبتلع واجهة مثبّتة عند / مسار API حقيقيًا.

ويغيّر الأمان السلوك الافتراضي أيضًا. فالملف المقدم من CDN لا يدخل إلى Python أصلًا، ولذلك لا يمكن تشغيل البرمجيات الوسيطة في FastAPI أو فحوص Depends() عليه. لهذا تُبقي Vercel المسارات التالية على Function افتراضيًا:

  • جميع نقاط تثبيت الملفات الثابتة والواجهات الأمامية عندما يحتوي التطبيق على برمجيات وسيطة في المستوى الأعلى.
  • نقاط تثبيت الملفات الثابتة في تطبيق فرعي عندما تكون لذلك التطبيق برمجيات وسيطة.
  • أي واجهة أمامية تحرسها تبعيات FastAPI.

أما ضبط cdn = false فيختار المقايضة المعاكسة: يعطّل الرفع ويُبقي كل طلب مطابق على Function. وهذا خيار سليم عندما يكون على شيفرة التطبيق فحص كل طلب.

هناك أيضًا حالة طرفية أصغر: يظل الجذر المجرد لنقطة تثبيت StaticFiles متجهًا إلى Function، كي يعيد FastAPI توجيهه إلى الصيغة ذات الشرطة المائلة الختامية. لذلك لا تتوقع أن ترى صفرًا حرفيًا في استهلاك Function إذا واصل العملاء طلب ذلك المسار المجرد.

أين يغيّر ذلك سير العمل؟

مؤسس SaaS مستقل يدير مستودع FastAPI واحدًا

يستطيع المؤسس الذي يقدم تطبيق ويب مجمّعًا عبر app.frontend() إبقاء API ديناميكية، مع إخراج حركة HTML وCSS وJavaScript العامة من مسار Function. والنتيجة خط أساس أوضح لاستهلاك الحوسبة؛ إذ يمكن أن تنمو حركة المنتج من دون أن يبدو كل جلب لأصول المتصفح كأنه عمل في الخلفية.

مهندس وكالة يتعامل مع ملفات عامة وأخرى خاصة بالعملاء

يستطيع مهندس الوكالة وضع الواجهة العامة على CDN، مع التصريح عن المسار الحساس قبل تثبيت الملفات الثابتة. ولا تقتصر الفائدة على خفض استهلاك Function، بل تنتج أيضًا خريطة مسارات توضّح أي ملفات عميل تحتاج إلى Python لاتخاذ قرار الوصول، وأيها لا يحتاج إلى ذلك.

قائد فريق الواجهة الخلفية يعمل مع الإدارة المالية

يمكن لقائد فريق الواجهة الخلفية منح الإدارة المالية تقديرين منفصلين: حركة FastAPI الديناميكية لبند Function، وإجمالي حركة الزوار لبند CDN. وبذلك لا يعود انخفاض Function Invocations يُفهم خطأً على أنه انخفاض مماثل في Edge Requests أو نقل البيانات.

فريق يستخدم برمجيات وسيطة على مستوى التطبيق

ينبغي لفريق يستخدم برمجيات وسيطة في المستوى الأعلى للتسجيل أو تحديد المستأجر أو المصادقة أن يتوقع بقاء نقاط تثبيت الملفات الثابتة على Function افتراضيًا. والخطوة المفيدة هي تحديد ما إذا كان يمكن لمنطقة واضحة من الأصول العامة تجاوز تلك البرمجيات. إذا كانت الإجابة لا، فلا يوجد توفير آمن يمكن إدراجه في الميزانية نتيجة هذا التغيير.

راجع عملية نشر واحدة

ابدأ من جرد حقيقي للمسارات، لا من افتراض أن كل ملف يحمل امتدادًا هو ملف عام.

  1. حدّد المسارات العامة والمحمية

    احصر كل مجلد يستخدم app.frontend() وكل نقطة تثبيت تستخدم StaticFiles. حدّد الملفات التي يمكن تقديمها إلى أي زائر، وافصل عنها كل ما تتوقف استجابته على مستخدم أو مستأجر أو دور أو ملف تعريف ارتباط أو نتيجة برمجيات وسيطة وقت الطلب.

  2. تحقق من ترتيب التصريح

    ضع مسار Function قبل نقطة تثبيت StaticFiles عندما يجب أن تكون له الأولوية. وهذا هو النمط الذي توثقه Vercel:

    Python
    from fastapi import FastAPI
    from fastapi.staticfiles import StaticFiles
    
    app = FastAPI()
    
    # Declared before the mount, so this route wins over any CDN file at this path.
    @app.get("/static/protected.json")
    def protected():
        return {"access": "denied"}
    
    app.mount("/static", StaticFiles(directory="static"))
  3. أبقِ المسارات المحمية على Function

    تحقق من البرمجيات الوسيطة في المستوى الأعلى، والبرمجيات الوسيطة في التطبيقات الفرعية، وتبعيات الواجهة الأمامية قبل تغيير الإعدادات. لا تضبط cdn = true لمجرد خفض رسم بياني، إلا إذا كانت جميع الملفات المتأثرة عامة فعلًا. واستخدم cdn = false عندما يجب أن تمر كل حركة مطابقة عبر FastAPI.

  4. قرّر ما إذا كنت ستقلّص الحزمة

    إذا كان التطبيق لا يقرأ الملفات المرفوعة أثناء التشغيل مطلقًا، يمكنك استبعاد مجلداتها المصدرية من حزمة Function باستخدام الإعداد الموثق:

    TOML
    [tool.vercel.fastapi.static]
    exclude = true

    اترك الإعداد الافتراضي كما هو إذا كانت شيفرة وقت التشغيل لا تزال تحتاج إلى تلك الملفات.

  5. انشر وتحقق من فصل الحركة

    شغّل vc deploy. اختبر ملفًا عامًا وملفًا محميًا ومسار API واحدًا. تأكد من أن الاستجابة المحمية لا تزال تعمل كما ينبغي، ثم قارن Function Invocations وActive CPU وProvisioned Memory وFast Origin Transfer وEdge Requests وFast Data Transfer للمشروع في Usage. ينبغي للعينة العامة أن تغادر مسار Function من دون أن تختفي من إجماليات CDN.

الحد الواقعي للتوفير

لا يتجاوز سعر الاستدعاء المباشر $0.60 لكل مليون استدعاء في Pro. وفي تطبيق صغير، قد يكون الوفر النقدي بضعة سنتات أو يستوعبه رصيد الاستخدام الشهري. وقد تتمثل الفائدة الأكبر في إزالة ضوضاء الأصول من استهلاك Function، والإبقاء على هامش الحوسبة لأعمال API الفعلية.

يزداد الوفر عندما تكون حركة الأصول العامة كبيرة، أو حين كان مسار Function القديم يحتفظ بالذاكرة مدة مؤثرة، أو عندما كانت الاستجابات تولّد قدرًا معتبرًا من Fast Origin Transfer. ويظل محدودًا عندما تكون الملفات موجودة أصلًا في public/، أو تكون الحركة منخفضة، أو تُبقي قواعد الأمان المسارات على Function كما ينبغي.

ولا يغني ذلك عن تحسين الأصول. فما زال على حزمة JavaScript الكبيرة نفسها أو الصورة أو الخط عبور CDN إلى الزائر. ويظل تقليص هذه الملفات هو الإجراء الذي يخفض Fast Data Transfer.

ما الذي ينبغي فعله يوم الاثنين؟

تحرّك هذا الأسبوع إذا كان app.frontend() أو StaticFiles يقدّم ملفات عامة وتظهر تلك الطلبات ضمن استهلاك Function. وانتظر إذا كانت الملفات محمية ولم تفصل قواعد الوصول الخاصة بها بعد. أما إذا كانت الملفات المعنية تأتي أصلًا من public/ أو من مسار آخر تدعمه CDN، فلن يؤثر التغيير عليك.

ابدأ يوم الاثنين بجرد مسارات الأصول العامة والمحمية، وحافظ على كل مسار وحاجز يجب تشغيله، ثم تحقق من عملية نشر واحدة بطلب واحد من كل فئة. ضع في الميزانية الانخفاض المقاس في استهلاك Function، مع إبقاء طلبات CDN ونقل البيانات في الحساب.

إذا أردت مزيدًا من الشروح المبسطة لتغييرات المنصات التي تبدّل فاتورة التشغيل، فاشترك في النشرة البريدية.

آخر تحديث
13 سبتمبر 2026
التصنيف
Explained

فضّل هذا الموقع في Google

إضافة omidsaffari.com كمصدر مفضّل في بحث Google

اجعل omidsaffari.com مصدرًا مفضّلًا، وسيرفعه Google لك في Top Stories وAI Overviews وAI Mode.

مقالات ذات صلة
تدوير مفاتيح API في OpenAI: خطة لتفادي انقطاع الخدمة

تدوير مفاتيح API في OpenAI: خطة لتفادي انقطاع الخدمة

دليل عملي لتدوير مفاتيح API في OpenAI قبل انتهاء الصلاحية، مع تحديد المسؤوليات وتقدير تكلفة الصيانة واختبار المفتاح البديل من دون تعطيل الخدمات.13 سبتمبر 2026Explained
صلاحيات Vercel Connect: من يملك بيانات الاعتماد المشتركة؟

صلاحيات Vercel Connect: من يملك بيانات الاعتماد المشتركة؟

تمنح صلاحيات Vercel Connect فرق Pro وEnterprise حدًا واضحًا لإدارة الموصلات المشتركة. تعرّف كيف توزّع الأدوار وتحافظ على سير بناء التطبيقات.13 سبتمبر 2026Explained
فهرسة ملفات R2 بلا امتداد: ماذا يغيّر تحديث Cloudflare AI Search؟

فهرسة ملفات R2 بلا امتداد: ماذا يغيّر تحديث Cloudflare AI Search؟

يشرح هذا الدليل كيف يفهرس Cloudflare AI Search ملفات R2 بلا امتداد عبر Content-Type الصحيح، وما يبقى من تدقيق البيانات الوصفية والمزامنة والتحقق.12 سبتمبر 2026Explained
Vercel Sandbox بسعة 64 GB: متى تستغني مهام الوكلاء عن التجزئة؟

Vercel Sandbox بسعة 64 GB: متى تستغني مهام الوكلاء عن التجزئة؟

تضاعفت مساحة العمل الافتراضية في Vercel Sandbox من 32 GB إلى 64 GB. إليك ما يتغير في مهام البرمجة الكبيرة، وكيف تقيس الذروة قبل تعديل سير العمل.12 سبتمبر 2026Explained
Cloudflare Workflows بعد تقليص سجل التشغيل: كيف تضبط الاحتفاظ والتكلفة

Cloudflare Workflows بعد تقليص سجل التشغيل: كيف تضبط الاحتفاظ والتكلفة

تغيّر الإعداد الافتراضي للاحتفاظ في Cloudflare Workflows إلى 7 أيام. تعرّف إلى طريقة فصل سجل النجاح عن الأخطاء وضبط التكلفة من دون فقد أدلة الحوادث.11 سبتمبر 2026Explained
تحليل البيانات بالذكاء الاصطناعي مع ChatGPT Data: عمليات تسليم أقل للتقارير الأسبوعية

تحليل البيانات بالذكاء الاصطناعي مع ChatGPT Data: عمليات تسليم أقل للتقارير الأسبوعية

دليل عملي لاستخدام ChatGPT Data في تحليل البيانات بالذكاء الاصطناعي وتقليل تسليمات التقارير الأسبوعية، مع ضبط المقاييس والصلاحيات والتكلفة والمراجعة البشرية.11 سبتمبر 2026Explained
Cursor AI: كيف تنقل Cursor Projects فرق البرمجة إلى طابور المراجعة

Cursor AI: كيف تنقل Cursor Projects فرق البرمجة إلى طابور المراجعة

يضيف Cursor Projects سياقًا مشتركًا ووكلاء متكررين. يشرح هذا الدليل طريقة التشغيل وعبء مراجعة الكود وضوابط الميزانية قبل اعتماده داخل فريق هندسي.11 سبتمبر 2026Explained
Codex ChatGPT والبحث العميق: كيف تعمل الميزانية المشتركة؟

Codex ChatGPT والبحث العميق: كيف تعمل الميزانية المشتركة؟

دليل يوضح كيف يستهلك Deep Research داخل ChatGPT Work وCodex الرصيد المشترك، وكيف تختار المسار المناسب وتراقب التكلفة من دون تعطيل تنفيذ فريقك.10 سبتمبر 2026Explained
النشرة البريدية

رسالة واحدة، كل يوم أحد.أنظمة تعمل، لا آراء ساخنة.

أسبوعية. بلا إزعاج. يمكنك إلغاء الاشتراك متى شئت.