موقع PHP الخاص بك بطيء؟ حان الوقت للنظر تحت الغطاء
هل سبق لك أن انتظرت تحميل صفحة لفترة أطول مما تستغرقه في تحضير قهوة الصباح؟ شعور مألوف عندما يكتب العميل أو المستخدم: "الموقع يعمل ببطء". في أغلب الأحيان، المشكلة ليست في PHP "السيء"، بل في كيفية استخدامنا لإمكانياته. PHP هي لغة قوية ومرنة، ولكن بدون إعداد وتنميط مناسبين، يمكن أن تتحول إلى "سلحفاة".
في هذه المقالة، لن نلقي محاضرات مملة. سنأخذ مشروعًا حقيقيًا، ونحلله إلى أجزاء باستخدام أدوات التنميط، ونوضح كيف نحول الكود البطيء إلى كود سريع البرق. ستتعرف على ما هو أداء PHP، وكيفية قياسه، والأهم من ذلك، كيفية تحسينه. هيا بنا!
لماذا قد يكون PHP بطيئًا؟ الخرافات والواقع
يعتقد العديد من المطورين أن PHP بطيء بطبيعته. هذه خرافة. الإصدارات الحديثة (7.4+، 8.x) تظهر نتائج ممتازة. المشكلة غالبًا ما تكون في التالي:
- الحلقات والاستعلامات غير المحسّنة لقاعدة البيانات — كلاسيكيات هذا النوع.
- تسرب الذاكرة — النص البرمجي "يلتهم" المزيد والمزيد من الموارد.
- غياب التخزين المؤقت — إعادة حساب نفس الشيء في كل مرة.
- عدد كبير جدًا من ملفات التضمين ومحملات التشغيل التلقائي — نظام الملفات يعاني.
ولكن قبل التحسين بشكل أعمى، عليك أن تفهم: أين يقع عنق الزجاجة بالضبط. لهذا يوجد التنميط.
ما هو تنميط PHP ولماذا هو مطلوب؟
التنميط هو عملية جمع بيانات حول عمل النص البرمجي: وقت تنفيذ كل دالة، عدد الاستدعاءات، استهلاك الذاكرة. إنه مثل الأشعة السينية للكود الخاص بك. ترى على الفور أي طريقة "تستهلك" أكبر قدر من الموارد.
بدون التنميط، فإنك تخاطر بتحسين ما يعمل بشكل جيد بالفعل، بينما تظل المشكلة الحقيقية غير مكتشفة. لذلك، تنميط PHP هو الخطوة الأولى نحو التسريع.
أدوات التنميط: من البسيط إلى المعقد
هناك عدة طرق للنظر داخل نص PHP البرمجي. سننظر في ثلاثة من أشهرها.
1. Xdebug — جد أدوات التنميط
Xdebug لا يقوم بتصحيح الأخطاء فحسب، بل يقوم أيضًا بالتنميط. يقوم بإنشاء ملفات cachegrind التي يمكن تحليلها في برامج خاصة (مثل KCachegrind أو QCachegrind).
التثبيت:
pecl install xdebugالإعداد في php.ini:
xdebug.mode = profilexdebug.output_dir = /tmp/profilingبعد تشغيل النص البرمجي، سيظهر ملف في المجلد /tmp/profiling. افتحه في KCachegrind وسترى "شجرة الاستدعاءات" مع وقت التنفيذ. على سبيل المثال، قد تكتشف أن الدالة getUserData() تستغرق 80% من الوقت.
2. Blackfire.io — حديث ومريح
Blackfire.io هو أداة تنميط من SensioLabs (مبتكري Symfony). يعمل كإضافة لـ PHP ويجمع البيانات في الوقت الفعلي. الميزة الإضافية هي واجهة ويب جميلة وتوصيات تلقائية.
التثبيت:
curl -s https://blackfire.io/install.sh | bashثم تتصل بـ API وتشغل التنميط:
blackfire run php script.phpسيظهر Blackfire ليس فقط الوقت، ولكن أيضًا عدد عمليات الإدخال/الإخراج، وتخصيص الذاكرة، وحتى استعلامات SQL.
3. الدوال المضمنة: microtime و memory_get_usage
إذا كنت بحاجة إلى التحقق بسرعة من جزء معين من الكود دون تثبيت أدوات ثقيلة، استخدم دوال بسيطة:
$start = microtime(true);// الكود الخاص بك$end = microtime(true);echo "وقت التنفيذ: " . ($end - $start) . " ثانية";لقياس الذاكرة:
echo memory_get_usage() / 1024 . " KB";هذا لن يعطيك صورة كاملة، لكنه سيساعد في العثور على الأخطاء الواضحة.
كيفية تحليل نتائج التنميط؟
لنفترض أنك حصلت على ملف التنميط. ما الذي تبحث عنه؟
المدونات
توصيات الكتب
اقرأ أيضًا