تحليل كود PHP: إيجاد نقاط الاختناق للمبتدئين

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر تحليل كود PHP مهمًا؟

\n

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

\n

هنا يأتي دور تحليل كود PHP. إنها عملية جمع بيانات حول وقت التنفيذ واستهلاك الذاكرة لكل جزء من البرنامج. يسمح لك التحليل بتحديد الوظائف والاستعلامات التي تخلق "نقاط اختناق" (bottlenecks) بدقة، وتوجيه الجهود نحو إزالتها.

\n

في هذه المقالة، سنشرح أساسيات التحليل للمبتدئين: ما هي الأدوات الموجودة، وكيفية تثبيتها وتفسير النتائج. ستتعلم كيفية إيجاد المشكلات دون تخمين أو سحر.

\n\n

1. الأدوات الرئيسية لتحليل PHP

\n

هناك العديد من الأدوات الشائعة لتحليل PHP. سننظر في اثنتين رئيسيتين: Xdebug (مجاني، مدمج) و Blackfire.io (متقدم، بواجهة رسومية).

\n\n

1.1 Xdebug - كلاسيكيات التحليل

\n

Xdebug هو امتداد لـ PHP، والذي بالإضافة إلى التصحيح، يمكنه إنشاء ملفات تحليل (cachegrind). يمكن تحليل هذه الملفات باستخدام أدوات مساعدة خاصة، مثل KCachegrind (لينكس) أو WinCacheGrind (ويندوز).

\n

تثبيت Xdebug:

\n
    \n
  • تأكد من تثبيت PHP (الإصدار 7.4+).
  • \n
  • نفذ الأمر: pecl install xdebug (أو استخدم مدير الحزم لنظام التشغيل الخاص بك).
  • \n
  • أضف الأسطر التالية إلى php.ini:
  • \n
\n
zend_extension=xdebug.so\nxdebug.mode=profile\nxdebug.output_dir=/tmp/profiling
\n

بعد ذلك، سيقوم كل طلب بإنشاء ملف تحليل في الدليل المحدد.

\n\n

1.2 Blackfire.io - محلل سحابي حديث

\n

Blackfire هي أداة تجارية (مع حد مجاني) توفر واجهة ويب لتحليل الأداء. تقوم تلقائيًا ببناء رسوم بيانية للاستدعاءات وتظهر وقت تنفيذ كل دالة.

\n

بداية سريعة مع Blackfire:

\n
    \n
  • قم بتثبيت Blackfire Agent و Probe (التعليمات على الموقع الرسمي).
  • \n
  • ابدأ التحليل من خلال إضافة المتصفح أو أمر CLI:
  • \n
\n
blackfire curl http://example.com/slow-page.php
\n

سيتم فتح النتيجة في واجهة الويب مع رسوم بيانية توضيحية.

\n\n

2. كيفية تفسير نتائج التحليل

\n

بعد الحصول على بيانات التحليل، تحتاج إلى فهم ما يجب النظر إليه أولاً. دعنا نلقي نظرة على تقرير نموذجي باستخدام Xdebug + KCachegrind.

\n\n

2.1 المقاييس الرئيسية

\n
    \n
  • Self Time (الوقت الخاص) - وقت تنفيذ الدالة نفسها دون احتساب الاستدعاءات المتداخلة. هذا هو المؤشر الرئيسي للعمليات "الثقيلة".
  • \n
  • Cumulative Time (الوقت التراكمي) - وقت تنفيذ الدالة مع جميع الاستدعاءات الفرعية.
  • \n
  • Number of Calls - عدد مرات استدعاء الدالة. أحيانًا لا تكون المشكلة في دالة واحدة بطيئة، بل في آلاف الاستدعاءات السريعة.
  • \n
\n\n

2.2 مثال على التحليل

\n

لنفترض أنك قمت بتحليل صفحة كتالوج المنتجات ورأيت أن الدالة getProductPrice() لها وقت تراكمي كبير. عند توسيعها، تلاحظ أنه يتم استدعاء getDiscountFromDB() داخلها - وهي التي تستهلك 80% من الوقت.

\n

الآن أنت تعرف ما يجب تحسينه: إما تخزين الخصومات مؤقتًا أو إعادة كتابة استعلام SQL.

\n
<?php\n// مثال على دالة "ثقيلة"\nfunction getDiscountFromDB($productId) {\n    // استعلام بطيء بدون فهرس\n    $result = mysqli_quer                

المدونات

توصيات الكتب