تخطَّ إلى المحتوى
كل الرؤى

خفف العبء عن ووردبريس: أسند الوسائط إلى S3 والـ Edge.

جعفر أبازيد

WordPress AWS S3 CloudFront Performance
خفف العبء عن ووردبريس: أسند الوسائط إلى S3 والـ Edge.

يقوم ووردبريس بقدرٍ مدهشٍ من العمل مع كلّ رفع صورة: يولّد عند الرفع مجموعة من النسخ بمقاساتٍ مختلفة (thumbnail وmedium وlarge وغيرها)، ويُخزّنها كلّها، ومعظمها لا نحتاجه أبداً. النظام السابق الذي استبدلناه لمؤسّسةٍ إعلامية كان يولّد أكثر من عشرين نسخةً لكلّ صورة ويُخزّنها جميعًا. قِس ذلك على أرشيفٍ من مئات آلاف الصور، فإذا أنت تدفع تكاليف إضافية للتخزين والمعالجة، تكاليف لعملٍ لن يطلبه أحد.

هذه نسخةٌ موجزة بالعربية؛ والتفصيل الكامل، مع الكود والمخطّطات، في النسخة الإنجليزية.

الفكرة باختصار

نُسند العمل الصعب إلى الطرفين. بداية، يرفع المتصفّح الملفات الكبيرة مباشرةً إلى S3. وعند الطلب، تولّد الـ Edge المقاسات المطلوبة فقط. ويعود ووردبريس إلى ما يُتقنه: التحرير، لا معالجة الصور.

في S3 نحتفظ بنسختين فقط لكلّ صورة:

  • نسخةٌ أصلية كاملة الدقّة في تخزينٍ بارد (S3 Glacier Instant Retrieval)، أرشيفٌ طويل الأمد نادراً ما نحتاجه.
  • نسخة عملية (working master) محسّنة للويب في تخزينٍ ساخن (S3 Standard): مولّدة على أكبر مقاسٍ يحتاجه الموقع (لا 4K)، وبصيغةٍ مثالية (WebP للصور، WebM للفيديو)، مع إبقاء الجودة شبه كاملة lossless، فتُشتقّ منها كلّ المقاسات المطلوبة.

وهذه المقاسات المولّدة فلا تُخزَّن في S3 أبدًا: تولّدها خدمة AWS Serverless Image Handler عند الطلب وتبقى في ذاكرة الـ CDN. ولأنّ الـ Edge يولّد أيّ مقاسٍ عند الطلب، نُوقف توليد الصور المصغّرة في ووردبريس تمامًا، فنوفّر معالجةً وتخزينًا لنسخٍ لا يطلبها أحد.

archiveserveNew uploadoriginal photoOriginalfull resolutionS3 Glacier IR · coldWorking mastermax served sizeS3 Standard · hotImage HandlerCloudFront + Lambdaresize on requestDerivativesAVIF · WebPCDN cache, not S3
تتحوّل الرفعة الواحدة إلى نسختين مخزّنتين: نسخةٌ أصلية باردة تحتفظ بها، ونسخةٌ عملية ساخنة يولّد منها الـ Edge المقاسات عند الطلب. وكلّ مقاسٍ يراه الزائر تُنتجه خدمة Image Handler ويُخزَّن في ذاكرة الـ CDN، لا في S3 أبدًا.

والفيديو يلعب بقواعد معاكسة: يُرفَع من المتصفّح مباشرةً إلى S3 عبر رابطٍ موقَّع (presigned) دون أن يمرّ بالخادم، ومن هناك يُوزَّع مباشرةً من S3 إلى YouTube وDailymotion وVimeo دون الحاجة لرفعه مرة ثانية. وعند تشغيله على الموقع، نولّد الفيديو مرّةً واحدة عبر AWS Elemental MediaConvert إلى صيغ HLS ونُخزّنها، لأنّ ترميز الفيديو مكلِّف فنقوم به مرّةً واحدة ونحتفظ بالنتيجة، على عكس الصور تمامًا.

القصّة الكاملة

كلّ التفاصيل، أسماء الملفات المرفوعة المولّدة (بلا أحرف عربية في المفتاح)، وصيغ WebP وWebM، وطبقات تخزين S3 وسياسات دورة الحياة lifecycle policy، والكود، والمخطّطات، في النسخة الإنجليزية الكاملة:

Make WordPress do less: offloading media to S3 and the edge

نبني ونُشغّل هذا النوع من البُنى على ووردبريس وAWS. وإن كنت تُعاني من مكتبة وسائط ثقيلة على ووردبريس، لنتحدّث.

هل هناك ما يدور في عقلك؟

سواء كنت تبحث عن حل لمشكلة ما أو تبني نظاماً يدوم للمستقبل، أخبرنا بما تعمل عليه، يسرّنا أن نساعدك.