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

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

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

ابدأ الدورة

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

\n

أداء تطبيقات PHP يؤثر مباشرة على تجربة المستخدم وتكاليف الخوادم. غالبًا ما يواجه المطورون موقفًا يكون فيه الموقع بطيئًا ولكن السبب غير واضح. في هذه المقالة، سنستعرض الطرق العملية لتحليل أداء كود PHP التي ستساعدك في اكتشاف نقاط الضعف وتسريع تطبيقك.

\n\n

ما هو تحليل الأداء ولماذا هو مهم؟

\n

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

\n

الأهداف الرئيسية لتحليل أداء PHP:

\n
    \n
  • اكتشاف الدوال والطرق البطيئة
  • \n
  • كشف تسرب الذاكرة
  • \n
  • تحليل عدد الاستعلامات إلى قاعدة البيانات
  • \n
  • تحسين وقت تحميل الصفحات
  • \n
\n\n

أدوات تحليل الأداء المدمجة في PHP

\n

يوفر PHP عدة دوال مدمجة للتحليل الأولي للأداء. دعنا نستعرض الأكثر فائدة.

\n\n

الدالة microtime(true)

\n

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

\n
<?php\n$start = microtime(true);\n\n// الكود الخاص بك\n$data = [];\nfor ($i = 0; $i < 10000; $i++) {\n    $data[] = $i * $i;\n}\n\n$end = microtime(true);\n$executionTime = ($end - $start) * 1000;\necho "وقت التنفيذ: " . round($executionTime, 2) . " مللي ثانية";\n?>
\n\n

الدالة memory_get_usage()

\n

لتتبع استهلاك الذاكرة استخدم memory_get_usage() و memory_get_peak_usage():

\n
<?php\necho "الذاكرة المستخدمة: " . memory_get_usage() . " بايت\\n";\necho "الاستخدام الأقصى: " . memory_get_peak_usage() . " بايت";\n?>
\n\n

الفئة DateTime و DateInterval

\n

لقياسات أكثر دقة للعمليات الطويلة استخدم كائنات DateTime:

\n
<?php\n$start = new DateTime();\n\n// عملية طويلة\nsleep(2);\n\n$end = new DateTime();\n$interval = $start->diff($end);\necho "مضى: " . $interval->format('%s ثواني');\n?>
\n\n

أدوات تحليل الأداء الاحترافية

\n

للتحسين الجاد، الأدوات المدمجة غير كافية. دعنا نستعرض ثلاث أدوات شائعة.

\n\n

Xdebug — كلاسيكيات تحليل الأداء

\n

Xdebug هو إضافة PHP تولد ملفات أداء مفصلة بتنسيق cachegrind. التثبيت عبر Composer:

\n
pecl install xdebug
\n

بعد التثبيت، قم بتفعيل تحليل الأداء في php.ini:

\n
xdebug.mode = profile\nxdebug.output_dir = /tmp/profiler
\n

لتحليل الملفات الناتجة استخدم QCacheGrind (لينكس) أو WinCacheGrind (ويندوز). مثال على مخرجات التحليل:

\n
    \n
  • وقت تنفيذ كل استدعاء دالة
  • \n
  • عدد الاستدعاءات
  • \n
  • التسلسل الهرمي للاستدعاءات
  • \n
  • استهلاك الذاكرة
  • \n
\n\n

Blackfire.io — محلل أداء سحابي

\n

Blackfire.io من SensioLabs (مبتكري Symfony) يقدم تحليلاً متقدمًا مع تصور بياني:

\n
# تثبيت الوكيل\ncurl -s https://blackfire.io/install.sh | bash\n\n# تحليل الأداء عبر API\n$blackfire = new \\Blackfire\\Client();\n$probe = $blackfire->createProbe();\n\n// الكود الخاص بك\n$users = User::findAll();\n\n$blackfire->endProbe($probe);
\n

Blackfire يعرض تلقائيًا:

\n
    \n
  • توصيات للتحسين
  • \n
  • مقارنة مع ملفات الأداء السابقة
  • \n
  • تحليل استعلامات SQL
  • \n
\n\n

Tideways — لبيئة الإنتاج

\n

Tideways هو محلل أداء خفيف الوزن يعمل في الوقت الفعلي:

\n
composer require tideways/profiler\n\n// تفعيل تحليل الأداء\ntideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY | TIDEWAYS_XHPROF_FLAGS_CPU);\n\n// الكود الخاص بك\n$result = heavyFunction();\n\n$data = tideways_xhprof_disable();\                

المدونات

توصيات الكتب