تسريع تطبيقات PHP عبر Opcode Cache

بداية الموضوع قديم جداً وليس بشيء جديد, لكن لاحظت الكثير من الخوادم تعمل عليها الكثير من تطبيقات وسكربتات PHP ولا تحتوي على opcode cache وبكل اختصار هذه المواقع تحرم من زيادة في السرعة بدون اي سبب منطقي. الشيء الاخر لاحظت البعض يتكلم عن التسريع وعن استخدامهم دون معرفة مايتم وكيف يتم التسريع هذا غير ان الكثير يصنف memcache على انه opcode cache وهذا غير صحيح تماماً فا memcache لديه وظيفة مختلفة تماماً عن فكرة الـ opcode cache.

ماهية وظيفة الـ opcode cache؟ الجواب المختصر ان PHP لغة تفسيرية وهذا يعني في كل مرة يتم طلب الصفحة كمثال index.php فانه يجب اولاً تفسير هذه الاكواد إلى شيء يستطيع الخادم فهمة ثم بناء على هذا يتم تنفيذ الكود ويتم ارسال الصفحة للزائر, هنا يأتي دور opcode cache حيث يتم تخزين الكود المترجم في shared memory (حتى تستطيع بروسيس اخرى استخدامة) وعند طلب الصفحة مرة اخرى فانه يتجاوز مرحلة تفسير الاكواد ويتم التنفيذ فوراً وهنا نحن تجاوزنا اصعب مرحلة قد يواجهها اي تطبيق PHP اثناء ضغط الزوار وحتى بدون زوار سوف تلاحظ سرعة في التصفح بنسبة 2x على الاقل, وليس هذا وحسب استخدامك للـ opcode cache يعني وقت البروسيس يصبح اقل واستهلاك للموارد اقل وهذا يعني قدرة استيعاب اكبر لنفس السيرفر بنفس المواصفات. مثال اخر يبسط الفكرة لو سألتك 5 + 5 ؟ سوف تقول بدون تفكير 10 لكن ماذا لو سألتك 1845 × 5186 ؟ نطلع الحاسبة 🙂 والجواب 9568170 وسجل الرقم عندك واذا سألك اي شخص مرة اخرى وخلي نقول انك حفظت الرقم فانك سوف تعطية النتيجة بدون تفكير ان كان تفكير لثانية واحدة او 60 ثانية, وهذا هو الفرق بين استخدام opcode cache وعدم استخدامة. “opcode cache هذه الأيام أمر أساسي وإفتراضي جداً, يجب إستخدامة”

البرامج التي ينصح بها: 

  • APC
  • XCache
  • eAccelerator

الثلاث يأدون نفس المهمة والفرق بالاداء بينهم لا يتجاوز ال 10ms ~ 30ms, على اي حال انا شخصياً أفضل APC كون يتم تحديثة باستمرار ويتم تطويرة من قبل فريق PHP.  ولا يتطلبون تعديل اكواد PHP إلا بحالات متقدمة غالباً تكون بالبرمجة الخاصة لسبب ما.

بخصوص memcache: من اسمة نعرف انه memory cache, وظيفته انه يقوم بتخزين objects في الرام وهذا يتطلب دعم كامل من قبل برنامج الـ PHP المستخدم حيث يقوم البرنامج بتنفيذ المهمة x ويقوم بتخزين النتائج الخاصة بها في memcache او الـ memory لوقت معين وعند استدعاء x مرة اخرى فانه لا يقوم باعادة الحسبة مرة اخرى بل يقوم فوراً بتسليم النتيجة من الكاش وممكن ال objects هذه تكون عبارة عن محتوى الخبر الفلاني, او عداد المشاهدات او التعليقات او اي شيء تم استدعاءة من القاعدة او شيء من هذا. ليس هذا وحسب بل هو أحد أهم الحلول بوجهة نظري عند تقسيم الموقع على عدة سيرفرات ويب بحيث تبقي جميع السيرفرات متزامنة بنفس المحتوى عبر memcache لانه يوفر خاصية التوزيع. ونجد كبرى المواقع تستخدمة من اجل هذا الامر مثل تويتر ويوتيوب. وفي الحقيقة ان لم يكن الموقع مقسم على عدة سيرفرات فانت لست مضظر لاستخدام memcache حيث يمكنك تخزين الـ objects هذه على هيئة ملفات في الهارديسك ولكن هذا غير مستحب حيث سوف يزيد الضغط على IO وهذه اصغر عنق زجاجة في السيرفر كله 🙂

مدون منذ اكثر من 15 سنة، عاشق للقراءة والبحث عن الجديد والمخفي .. في بداياتي تخصصت بمجال امن المعلومات وتصميم الشبكات وادارة مراكز البيانات ولي اعمال كثيرة على صعيد منطقة الخليج. ثم انتقلت وغيرت مجالي للعمل كمهندس صوت متخصص بالمكس والماسترنج. كما اني طالب جامعي في هندسة الالكترونيات والكهرباء في بريطانيا. هذه نبذة مختصرة قدر الامكان.

‎التعليقات‫:‬ 2 On تسريع تطبيقات PHP عبر Opcode Cache

  • شكرا لك مصطفى على الموضوع الرائع , و لكن عندي سؤال , انا استخدم خدمة cloudflare لعمل cache لموقعي , هل استخدام هذه الطريقة سيزيد من سرعة الموقع ام انه لن يشكل اي فرق ؟؟

  • كلاودفلير يعمل كاش للملفات الثابته، بمعنى اخر يعمل CDN بشكل تلقائي دون تعديل برمجي على الموقع، وهو لا يسرع تنفيذ اكواد php باي شكل من الاشكال

اترك رد