تحليل أداء كود PHP: إيجاد نقاط الضعف عملياً

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تحليل أداء كود PHP: إيجاد نقاط الضعف عملياً



أي مطور PHP يواجه عاجلاً أم آجلاً مشكلة الأداء. يبدأ الموقع في التباطؤ، وتستغرق الصفحات 10 ثوانٍ للتحميل، ويختنق الخادم تحت الحمل. بدلاً من التخمين وإعادة كتابة الكود بأكمله، يجب استخدام تحليل الأداء - وهو نهج علمي لإيجاد نقاط الضعف. في هذه المقالة، سنستعرض الأدوات والأساليب العملية التي ستساعدك في إيجاد وإزالة "الاختناقات" في تطبيقات PHP بسرعة.



لماذا يعتبر تحليل الأداء ضرورة؟



بدون تحليل الأداء، أنت تعمل بشكل أعمى. قد تقضي ساعات في تحسين حلقة تكرار تستغرق 0.01% من الوقت، وتفوت المشكلة الحقيقية - مثل استعلام SQL بطيء أو تسرب للذاكرة. يعطيك تحليل الأداء أرقاماً دقيقة:



  • كم من الوقت تستغرقه كل دالة في التنفيذ؛
  • كم مرة يتم استدعاؤها؛
  • ما مقدار الذاكرة المستخدمة؛
  • ما هي الاستعلامات التي تبطئ النظام.


هذا يسمح لك باتخاذ القرارات بناءً على البيانات، وليس على الحدس.



أدوات تحليل أداء PHP



لننظر في ثلاثة مناهج رئيسية: الدوال المدمجة، و Xdebug، والخدمات السحابية.



1. دوال PHP المدمجة: microtime و memory_get_usage



أبسط طريقة هي استخدام microtime(true) و memory_get_usage(). هذا مناسب للفحص السريع لجزء معين من الكود.



<?php$start = microtime(true);$startMemory = memory_get_usage();

// الكود الذي تريد فحصه$array = range(1, 100000);usort($array, function($a, $b) { return $a <= $b ? 1 : -1;});

$time = microtime(true) - $start;$memory = memory_get_usage() - $startMemory;

echo "وقت التنفيذ: " . round($time, 4) . " ثانية";echo "الذاكرة المستخدمة: " . round($memory / 1024 / 1024, 2) . " MB";?>


الإيجابيات: لا يتطلب تثبيتاً، يعمل على أي استضافة.
السلبيات: غير مناسب للتوسع، تحتاج إلى وضع علامات يدوياً.



2. Xdebug + محلل الأداء



Xdebug هو إضافة قوية لتصحيح الأخطاء وتحليل الأداء. بعد التثبيت والإعداد، يقوم بإنشاء ملفات تحليل بتنسيق cachegrind. يمكن تحليل هذه الملفات باستخدام أدوات:



  • KCacheGrind (لينكس) أو QCacheGrind (ويندوز/ماك) - تطبيقات سطح مكتب؛
  • Webgrind - واجهة ويب للعرض السريع.


الإعداد في php.ini:



zend_extension=xdebug.soxdebug.mode=profilexdebug.output_dir=/tmp/profilingxdebug.profiler_output_name=cachegrind.out.%p


بعد تشغيل السكريبت، ستحصل على ملف يمكن فتحه في QCacheGrind. سترى شجرة الاستدعاءات، ووقت تنفيذ كل دالة، وعدد الاستدعاءات. هذه هي أفضل طريقة لإيجاد الدوال "الثقيلة".



مثال على التحليل: إذا رأيت أن الدالة array_search() تُستدعى 10,000 مرة وتستغرق 40% من الوقت، فمن الأفضل استبدالها بجدول تجزئة (isset($hash[$key])).



3. Blackfire.io - تحليل الأداء في الوقت الفعلي



Blackfire.io هي خدمة SaaS من SensioLabs (مبتكري Symfony). لا تتطلب تثبيت إضافة على الخادم (يكفي وكيل) وتوفر واجهة ويب جميلة مع توصيات.



التثبيت عبر Composer:



composer require blackfire/player


ثم يمكنك تحليل أي URL:



php vendor/bin/blackfire-player --uri="https://example.com/slow-page"


يقوم Blackfire تلقائياً بتسليط الضوء على نقاط الضعف: استعلامات SQL البطيئة، والحلقات غير المثلى، واستدعاءات الدوال الزائدة. كما يوضح مقدار الوقت المستغرق في I/O (القرص، الشبكة) ووحدة المعالجة المركزية.



أمثلة عملية لإيجاد نقاط الضعف



لننظر في حالة

المدونات

توصيات الكتب