تقدم هذه المقالة حلولاً عملية لتحسين PHP والتخزين المؤقت والضغط.
باعتبارها لغة برمجة ويب شائعة، فإن أكبر ميزة لـ PHP هي السرعة. لقد قام PHP4 بهذا بشكل جيد جدًا، ولا يمكنك العثور على لغة برمجة أسرع منه. ولكن إذا كان تحميل تطبيقك ثقيلًا، أو كان النطاق الترددي صغيرًا نسبيًا، أو كانت هناك اختناقات أخرى تؤثر على أداء الخادم الخاص بك، فيمكنك أيضًا تجربة بعض الوصفات التي وصفتها لك لمعرفة ما إذا كانت تعمل أم لا.
1. تحسين الكود
عندما يتعلق الأمر بتحسين الكود، قد تفكر في كود أنيق وواضح، ولكن هذا ليس معنى هذه المقالة، لأنه إذا كنت تريد البحث عن السرعة، فيجب عليك إجراء التعديلات المقابلة على كود مصدر PHP. بشكل عام، تتم إزالة التعليقات الزائدة لجعل التعليمات البرمجية غير قابلة للقراءة. ولكن بالنسبة للمبرمج الذي يتمتع بصفات جيدة، فهذا أمر لا يصدق. ولحسن الحظ، أصدرت Zend Technologies محرك Zend Optimization Engine لمساعدتك في القيام بذلك. إنه مجاني الآن، ولكن يجب عليك اتباع ترخيص Zend Optimizer. يمكن لهذا المنتج تحسين الكود الوسيط الناتج عن المحرك.
يعد تثبيت هذا المحرك أمرًا بسيطًا نسبيًا. بعد تنزيل الإصدار المتوافق مع النظام الأساسي، قم بفك ضغط الملف المضغوط، ثم قم بإضافة السطرين التاليين إلى ملف php.ini، وأعد تشغيل خادم الويب، وبذلك تكون قد انتهيت.
Zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=Off
إذا كان نظام Win32، فيجب أن يكون:
zend_optimizer.optimization_level=15
Zend_extension_ts="C: المسار إلى endOptimizer.dll"
zend_loader.enable=متوقف
! هذا ليس خطأ؟ لماذا ثلاثة أسطر؟ في الواقع السطر الثالث اختياري. نظرًا لأنه يبدو أن إيقاف تشغيل zend_loader يمكن أن يحسن السرعة قليلًا، فمن المفيد وضع هذا السطر الثالث في php.ini. تجدر الإشارة إلى أن الشرط الأساسي لإيقاف تشغيله هو عدم استخدام برنامج التشفير Zend.
2. التخزين المؤقت
إذا أردنا تحسين السرعة بشكل أكبر، فنحن بحاجة إلى التفكير في استخدام تقنية التخزين المؤقت. هناك بعض الحلول البديلة، بما في ذلك Zend Cache (الإصدار التجريبي)، وAPC، وAfterburner Cache، بالإضافة إلى jpCache.
ما ورد أعلاه عبارة عن وحدات عازلة. تقوم بتخزين التعليمات البرمجية الوسيطة التي تم إنشاؤها بواسطة الطلب الأول لملف .php في ذاكرة خادم الويب، ثم تقوم بإرجاع الإصدار "المجمع" للطلبات اللاحقة. نظرًا لأن هذا يقلل من عمليات القراءة والكتابة على القرص، ويعمل كل ذلك في الذاكرة، فيمكن لهذه العملية تحسين أداء التطبيق بشكل كبير.
هناك العديد من هذه المنتجات متاحة بسهولة، لذا من الذي يجب أن تختاره؟
يعد Zend Cache منتجًا تجاريًا جيدًا بعد تحميل صفحات PHP الكبيرة هذه لأول مرة، ومن الواضح أنك ستشعر بزيادة السرعة وسيقوم الخادم بتخصيص المزيد من الموارد. لسوء الحظ، هذا المنتج يكلف المال، ولكن في بعض الحالات، لا تريد أن تبخل بالمال.
Afterburner Cache هو أحد منتجات شركة Bware Technologies وهو موجود حاليًا في الإصدار التجريبي، ويبدو أنه يشبه Zend Cashe، لكنه لا يمكنه تحقيق نتائج جيدة مثل Zend Cache، ولا يمكنه العمل مع محرك تحسين Zend، ولكنه مجاني. لذلك يتم استخدام هذه الوحدة.
APC (Alternative PHP Cache) هي وحدة مجانية أخرى تم إصدارها بواسطة Community Connect ويبدو أنها جاهزة لبيئات الإنتاج.
3. ضغط محتوى الويب
بالنسبة للشبكات المزدحمة بشكل متزايد، يعد توفير النطاق الترددي ذا قيمة مثل توفير المياه. وفقًا لمعايير IETF، يجب أن تدعم معظم المتصفحات المحتوى المضغوط باستخدام gzip. وهذا يعني أنه يمكنك إرسال محتوى مضغوط بصيغة gzip إلى المتصفح، وسيقوم المتصفح بفك ضغط البيانات بشفافية.
mod_gzip هي وحدة Apache مجانية تم إطلاقها بواسطة Remote Communications، والتي يمكنها ضغط محتوى الويب الثابت وإرساله إلى المتصفح. بالنسبة لمعظم صفحات الويب الثابتة، هذه الوحدة مناسبة. على الرغم من أن
الأشخاص من شركة Remotecommunications قالوا إن هذه الوحدة تدعم كل المحتوى الديناميكي الذي تم إنشاؤه بواسطة mod_php وmod_perl وmod وما إلى ذلك، إلا أنه لا يبدو أنه يعمل، انطلاقًا من القائمة البريدية mod_gzip، ومن غير المتوقع أن يتم حل هذه المشكلة حتى 1.3.14.6f.
إذا أردنا ضغط المحتوى الديناميكي، فيمكننا استخدام class.gzip_encode.php، وهي فئة PHP تستخدم في بداية البرنامج النصي ونهايته. بالنسبة لموقع الويب بأكمله، يتم استدعاء الوظائف الموجودة في auto_prepend وauto_append لـ php.ini. لمزيد من التفاصيل، يمكنك قراءة برنامج هذا الفصل وقد تم التعليق عليه جيدًا ويخبرك المؤلف بكل شيء تقريبًا. ولكن قبل استخدامه، يجب أن يتم تجميع PHP الخاص بك لدعم zlib.
بالنسبة لـ PHP 4.0.4، الحل الجديد هو استخدام ob_gzhandler، والذي يمكنه تحقيق نفس تأثير الفئة المذكورة أعلاه. ما عليك سوى إضافة الجملة التالية إلى php.ini:
Output_handler = ob_gzhandler؛
وهذا يسمح لـ PHP بتنشيط التخزين المؤقت للمخرجات وضغط كل المخرجات. إذا كان هناك أي سبب خاص لعدم رغبتك في ضغط كل المحتوى وإخراجه، فيمكنك إضافة السطر التالي إلى ملف .htaccess لضغط الملفات في الدليل المقابل.
يمكن أيضًا إضافة
php_valueput_handler ob_gzhandler
مباشرةً إلى كود PHP:ob_start("ob_gzhandler");
تقنية الضغط هذه فعالة جدًا، ولكن بالنسبة لمستخدمي Netscape Communicator، تبدو غير مكتملة لأنها لا تستطيع ضغط ملفات الرسومات؟ ضغط ملفات jpeg و gif ليس لديه هذه المشكلة.
الخلاصة:
استخدام التقنيات التي تمت مناقشتها في هذه المقالة يجب أن يحسن أداء موقع الويب الخاص بك، ولكن انتبه إلى ما يلي:
- قد لا تكون PHP هي السبب في عنق الزجاجة، تحقق مرة أخرى من الأسباب الأخرى (مثل قاعدة البيانات)
- لا يمكنك زيادة حالة أداء الخادم إلى الحد الأقصى. لذا، قبل الشكوى من PHP والتخزين المؤقت لها، فكر فيما إذا كان الوقت قد حان لترقية خادمك أو اعتماد تقنية موازنة التحميل الديناميكية (وهذا يمثل الكثير من المال).
- لا تقلل من شأن ضغط المحتوى بينما ترى تحسينات في سرعة تطبيقات PHP على شبكة الإنترانت التي تبلغ سعتها 100 ميجابايت، لا تنس أين يشتكي مستخدمو المودم من صفحات HTML التي تبلغ سعتها 100 كيلو بايت.