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

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

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

ماهية وظيفة الـ opcode cache؟

الجواب المختصر ان PHP لغة تفسيرية وهذا يعني في كل مرة يتم طلب الصفحة، كمثال index.php، فانه يجب اولاً تفسير هذه الاكواد إلى شيء يستطيع الخادم فهمه، ثم بناء على هذا يتم تنفيذ الكود ويتم ارسال الصفحة للزائر.

هنا يأتي دور opcode cache حيث يتم تخزين الكود المترجم في shared memory «حتى تستطيع بروسيس اخرى استخدامه» وعند طلب الصفحة مرة اخرى فانه يتجاوز مرحلة تفسير الاكواد ويتم التنفيذ فوراً، وهنا نحن تجاوزنا اصعب مرحلة قد يواجهها اي تطبيق PHP اثناء ضغط الزوار وحتى بدون زوار سوف تلاحظ سرعة في التصفح بنسبة عالية ملحوظة.

وليس هذا وحسب، فاستخدامك للـ opcode cache يعني وقت البروسيس يصبح اقل واستهلاك للموارد اقل وهذا يعني قدرة استيعاب اكبر لنفس السيرفر بنفس المواصفات.

مثال اخر يبسط الفكرة، لو سألتك 5 + 5 ؟ سوف تقول بدون تفكير 10 لكن ماذا لو سألتك 1845 × 5186 ؟ نطلع الحاسبة 🙂 والجواب 9568170 وسجل الرقم عندك، واذا سألك اي شخص مرة اخرى وخلي نقول انك حفظت الرقم فراح تعطيه النتيجة بدون تفكير (ان كان المسالة تتطلب تفكير لثانية واحدة او 60 ثانية» وهذا هو الفرق بين استخدام opcode cache وعدم استخدامه.

opcode cache هذه الايام امر اساسي وافتراضي جدًا ولابد من استخدامه

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

  • APC
  • XCache
  • eAccelerator

الثلاث يأدون نفس المهمة والفرق بالاداء بينهم لا يتجاوز ال 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 باي شكل من الاشكال

شاركني برأيك