تحليل أداء كود PHP: إيجاد نقاط الضعف عمليًا
\nأداء تطبيقات PHP يؤثر مباشرة على تجربة المستخدم وتكاليف الخوادم. غالبًا ما يواجه المطورون موقفًا يكون فيه الموقع بطيئًا ولكن السبب غير واضح. في هذه المقالة، سنستعرض الطرق العملية لتحليل أداء كود PHP التي ستساعدك في اكتشاف نقاط الضعف وتسريع تطبيقك.
\n\nما هو تحليل الأداء ولماذا هو مهم؟
\nتحليل الأداء هو عملية جمع بيانات حول تشغيل البرنامج: وقت تنفيذ الدوال، عدد الاستدعاءات، استخدام الذاكرة والإدخال/الإخراج. على عكس التسجيل البسيط، يقوم محلل الأداء ببناء صورة كاملة لتنفيذ السكريبت.
\nالأهداف الرئيسية لتحليل أداء PHP:
\n- \n
- اكتشاف الدوال والطرق البطيئة \n
- كشف تسرب الذاكرة \n
- تحليل عدد الاستعلامات إلى قاعدة البيانات \n
- تحسين وقت تحميل الصفحات \n
أدوات تحليل الأداء المدمجة في PHP
\nيوفر PHP عدة دوال مدمجة للتحليل الأولي للأداء. دعنا نستعرض الأكثر فائدة.
\n\nالدالة microtime(true)
\nأبسط طريقة لقياس وقت تنفيذ جزء من الكود هي استخدام microtime(true):
<?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():
<?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\nXdebug — كلاسيكيات تحليل الأداء
\nXdebug هو إضافة PHP تولد ملفات أداء مفصلة بتنسيق cachegrind. التثبيت عبر Composer:
\npecl install xdebug\nبعد التثبيت، قم بتفعيل تحليل الأداء في php.ini:
\nxdebug.mode = profile\nxdebug.output_dir = /tmp/profiler\nلتحليل الملفات الناتجة استخدم QCacheGrind (لينكس) أو WinCacheGrind (ويندوز). مثال على مخرجات التحليل:
\n- \n
- وقت تنفيذ كل استدعاء دالة \n
- عدد الاستدعاءات \n
- التسلسل الهرمي للاستدعاءات \n
- استهلاك الذاكرة \n
Blackfire.io — محلل أداء سحابي
\nBlackfire.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);\nBlackfire يعرض تلقائيًا:
\n- \n
- توصيات للتحسين \n
- مقارنة مع ملفات الأداء السابقة \n
- تحليل استعلامات SQL \n
Tideways — لبيئة الإنتاج
\nTideways هو محلل أداء خفيف الوزن يعمل في الوقت الفعلي:
\ncomposer 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();\