إنشاء ملفات تعريف لتطبيقات PHP باستخدام PhpStorm وXdebug. إنشاء ملفات تعريف كود PHP فتح سجل ملفات التعريف

تثبيت xhprof لـ php:

Sudo apt-get install php5-xhprof

إعادة تشغيل أباتشي:

إعادة تشغيل خدمة Sudo Apache2

طباعة phpinfo(); وتحقق مما إذا كانت الوحدة متصلة أم لا؟

نتحقق من /etc/php5/Apache2/conf.d لمعرفة ما إذا كان هناك رابط لتكوين xhprof.ini يظهر هناك.

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

Sudo ln -s /etc/php5/mods-available/xhprof.ini /etc/php5/Apache2/conf.d/20-xhprof.ini إعادة تشغيل خدمة Sudo apache2

نتحقق من اتصال xhprof ونتحقق مما إذا كان 20-xhprof.ini متصلاً:

تُظهر لقطة الشاشة الإصدار 0.9.2، على الرغم من أنه تم عرض الإصدار 0.9.4 أثناء التثبيت، لكن هذا لا يشكل عائقًا أمامنا.

الآن يمكننا تعريف الكود الخاص بنا.

  1. في بداية الصفحة، قم بتمكين التوصيف باستخدام xhprof_enable();
  2. في نهاية الصفحة، قم بإيقاف تشغيل التوصيف باستخدام xhprof_disable() واحفظ البيانات المجمعة باستخدام save_run();
  3. التالي نقوم بالتحليل.

وظيفة xhprof_enable()يأخذ الأعلام كوسائط:

XHPROF_FLAGS_CPU لتسجيل إحصائيات المعالج،

XHPROF_FLAGS_MEMORY - للذاكرة،

XHPROF_FLAGS_NO_BUILTINS - لتجاهل الوظائف المضمنة.

لحفظ المعلومات ومواصلة استخلاصها، نحتاج إلى تثبيت أداة تحليل الملف الشخصي.

قم بتنزيل الأرشيف باستخدام أداة التحليل من صفحة xhprof، خذ الإصدار 0.9.4.

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

الآن يمكننا حفظ الملف الشخصي.

https://xn--d1acnqm.xn--j1amh/altadmin/posts/edit/188

تبدو شفرة التتبع كما يلي:

// تهيئة ملف التعريف - سنحسب وقت المعالج واستهلاك الذاكرة xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
// الكود التعريفي # إيقاف ملف التعريف $xhprof_data = xhprof_disable(); # احفظ التقرير وأنشئ رابطًا لمشاهدته include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test"); صدى "التقرير: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=$run_id&source=xhprof_test"; صدى "\n";

/var/www/html/xhprof-0.9.4 - المسار إلى المجلد حيث قمنا بفك ضغط المكتبات التي نحتاجها.

التقرير: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=57c32f3095d21&source=xhprof_test

هذا ما يبدو عليه تحليل الملف الشخصي. يعرض هذا الجدول كافة استدعاءات الوظائف التي تم تعريفها.

يمكننا فرز الوظائف من خلال النقر على عناوين الجدول.

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

المؤشرات:
شركة توتال وقت الحائط (الوقت المستغرق في تنفيذ الوظائف، مع مراعاة انتظار الاستجابات من المقابس ونظام الملفات والموارد الأخرى)
شركة توتال وحدة المعالجة المركزية (الوقت المستغرق في تنفيذ الوظائف)
شركة توتال MemUse (استخدام الذاكرة)
شركة توتال PeakMemUse (ذروة استخدام الذاكرة)
عدد استدعاءات الوظائف

هناك أيضًا خيار عرض التقرير بيانيًا. ولكن للقيام بذلك، عليك التأكد من تثبيت مكتبة graphviz:

Apt-get install graphviz

ثم في ملفك الشخصي، عليك النقر للعرض وفويلا:

الآن يمكنك تحليل الكود وتحسينه.

ملف تعريف كود PHP

عاجلاً أم آجلاً، يواجه كل واحد منا الكود القديم وتحسينه. في مثل هذه الحالة، يعد مصحح الأخطاء ومحلل التعريف أفضل مساعدين للمبرمج. بالنسبة لأولئك الذين يعملون مع PHP، بفضل Derick Rethans، هناك أداة جيدة - xDebug. هناك الكثير من المعلومات المتعلقة بـ xDebug حتى في RuNet، لذا لن تتناول هذه المقالة هذا الموضوع.

عندما صادفت إشارة إلى ملف تعريف PHP، فكرت على الفور في xDebug (لقد نسيت منذ فترة طويلة الأدوات الخاصة بـ Zend)، لكن هذه المرة كنت مخطئًا - سنتحدث عن XHProf.
XHProf

تم تطوير ملف التعريف هذا خصيصًا لفيسبوك، وتم فتح كود المصدر الخاص به في مارس 2009.

تمت عملية التثبيت بسرعة وسهولة.
wget pecl.php.net/get/xhprof-0.9.2.tgz
القطران xvf xhprof-0.9.2.tgz
مؤتمر نزع السلاح xhprof-0.9.2/امتداد/
phpize
./configure && make && make install
مؤتمر نزع السلاح /usr/local/etc/php.d/
vim xhprof.ini
مؤتمر نزع السلاح /سر/المحلية/
vim header.php
vimfooter.php
فيم الخ/php.ini
/etc/init.d/php-fpm إعادة التشغيل
cp vhost.conf.template prof.my.conf
sed -i s/site/prof/ prof.my.conf
vim prof.my.conf
/etc/init.d/nginx إعادة التشغيل

دعونا نحلل التكوينات المذكورة

Xhprof.ini
Extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so
xhprof.output_dir = "/home/max/www/profile/"

Prof.my.conf - تكوين Nginx - الأكثر معيارًا.

الخادم (
استمع 80؛
اسم الخادم prof.my;
محارف utf8؛

الجذر /usr/local/src/xhprof-0.9.2/xhprof_html ؛
موقع/(
فهرس الفهرس.php;
}

الموقع ~ \.php$ (
fastcgi_pass 127.0.0.1:12000;
fastcgi_index Index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/src/xhprof-0.9.2/xhprof_html/$fastcgi_script_name;
تشمل fastcgi_params؛

في /usr/local/src/xhprof-0.9.2/xhprof_html هناك مصادر PHP التي تنشئ واجهة WEBGUI جيدة لمنشئ ملفات التعريف.

إذن فيما يتعلق بالملفين الرئيسيين:

Header.php


include_once "/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php";
include_once "/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php";
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
}

تذييل.php
إذا(isset($_COOKIE["xhprof"]))(
إذا (extension_loaded("xhprof")) (
$profiler_namespace = "myapp"; // مساحة الاسم للتطبيق الخاص بك
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);

// عنوان url لمكتبات XHProf UI (تغيير اسم المضيف والمسار)
$profiler_url = sprintf("http://prof.my/index.php?run=%s&source=%s", $run_id, $profiler_namespace);
صدى صوت<<إخراج ملف التعريف
خارج؛
}
}

نقوم الآن بتشغيل أي برنامج PHP نصي عبر الويب ونرى في الزاوية اليسرى العليا رابطًا لمخرج ملف التعريف - وهذا هو بالضبط ما تم إنشاء المضيف prof.my من أجله

يرجى ملاحظة - أستخدم التحقق من ملفات تعريف الارتباط! مع هذا الاختيار، يمكنك استخدام ملف التعريف بأمان على خادم الإنتاج - على البيانات الحقيقية والتحميل الحقيقي.

تعرض واجهة الويب لملف التعريف علامات تحتوي على معلومات حول كل وظيفة وتبلغ عن المعلومات التالية:

  • عدد المكالمات لكل وظيفة
  • وقت الجدار، الوقت المستغرق في تنفيذ الوظائف (بما في ذلك انتظار الاستجابات من المقابس، ونظام الملفات، وما إلى ذلك).
  • وقت وحدة المعالجة المركزية (CPU)، الوقت المستغرق في تنفيذ الوظائف (باستثناء انتظار الاستجابات من المقابس، ونظام الملفات، وما إلى ذلك).
  • استخدام الذاكرة
  • ذروة استخدام الذاكرة

من الممكن فرز الجدول حسب أي من المعلمات

تنقسم المعلومات المتعلقة بكل وظيفة إلى نوعين آخرين: شاملة وحصرية. يشمل "الشامل" الأرقام المستخدمة في مكالمات الأطفال، بينما "الحصري" لا يشملها. من الممكن أيضًا النقر على اسم الوظيفة لرؤية المعلومات عنها فقط والوظائف التي تم استدعاؤها منها والتي تم استدعاؤها بواسطتها.

إذا تم تثبيت GraphViz على النظام، فسيقوم منشئ ملفات التعريف برسم رسم بياني للاتصال لك.

ملاحظة. دون كسر التقاليد: هذه أول مشاركة لي على حبري.

محدث: أعيد نشره في PHP.

FirePHP هو امتداد لـ firebug، والذي يسمح لك، جنبًا إلى جنب مع فئة php الصغيرة، ببث البيانات من php، على سبيل المثال، جميع أنواع var_dump ومعلومات تصحيح الأخطاء الأخرى، إلى وحدة تحكم firebug يتم بث جميع معلومات التصحيح من خلال الرؤوس ولا تتناثر في الصفحات ولا تكسر منطق التطبيق بأي شكل من الأشكال. الموقع الرسمي: http://firephp.org/.

الفكرة الرئيسية.

خوارزمية التنميط العامة هي كما يلي:
  1. في بداية الصفحة نقوم بتمكين التوصيف باستخدام xhprof_enable()
  2. في نهاية الصفحة، قم بإيقاف تشغيل التوصيف باستخدام xhprof_disable() واحفظ البيانات المجمعة باستخدام save_run()
  3. بعد ذلك، باستخدام فئة firephp php، نقوم بتمرير رابط لبيانات ملفات التعريف إلى جزء العميل
  4. في وحدة التحكم Firebug نفتح المعلومات التي نحتاجها
  5. نحن نفرح :)
أود أيضًا أن أقول إن إضافة هذه الوظائف يدويًا إلى نصوص PHP الخاصة بك أمر رائع بالطبع. لكنني أريد أن تكون هذه المعلومات في متناول اليد دائمًا أثناء التطوير، وألا ينتهي بها الأمر على خوادم الإنتاج. نحن نحل هذه المشكلة على النحو التالي:

في مشاريعنا، في جميع البرامج النصية تقريبًا، يتم توصيل ملف عمل مع مُحمل فئة ووظائف الاتصال والأشياء الضرورية الأخرى في البداية. ولذلك، قمنا بتضمين ملف التعريف في هذا الملف. ولكي نتمكن من تشغيل/إيقاف وضع تصحيح الأخطاء حسب الرغبة، أضفنا فحصًا لثابت التكوين، بالإضافة إلى أننا قمنا بتغليف هذه الاختبارات في بعض العلامات الوصفية التي تتم إزالتها تلقائيًا عند إنشاء المشروع. الأمر نفسه ينطبق على إيقاف تشغيل ملفات التعريف وكتابة المعلومات على الرؤوس باستخدام firephp - يتم حل هذه المهام بواسطة وظيفة واحدة يتم استدعاؤها في نهاية كل برنامج نصي PHP ويتم تغليفها أيضًا بعلامات وصفية. يبدو شيء من هذا القبيل:

// تتم كتابة الثوابت التالية في ملف تكوين التطبيق

/** طريقة تشغيل البيئة * */
تعريف("APPLICATION_ENV" , "dev" ); // ديف - التصحيح | الموالية للإنتاج
/** المسار إلى ملف التعريف */
تعريف("XHPROF_ROOT" , __DIR__ . "/ExtProcs/debug/xhprof-0.9.2");

/***************************************************************************************
* بعد ذلك، في الملف الذي تم تحميله في بداية كل برنامج نصي، نقوم بتشغيل ملف التعريف
* DEV_START وDEV_END هما علامتنا الوصفية، ويتم قطع كل شيء بينهما أثناء التجميع
***************************************************************************************/

//-- DEV_START
//-- في وضع التصحيح، نقوم بتوصيل مكتبات التصحيح

// تحميل firephp
require_once(__DIR__ . "/ يتضمن/ExtProcs/debug/firephp/FirePHP.class.php");
//-- قم بتحميل ملف التعريف
"/xhprof_lib/utils/xhprof_lib.php");
require_once(XHPROF_ROOT. "/xhprof_lib/utils/xhprof_runs.php");
// تهيئة ملف التعريف بالأعلام الضرورية. وصف تفصيلي للأعلام
// يمكن العثور عليه على php.net/manual/ru/xhprof.constants.php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
//-- DEV_END

// حسنًا، يتم استدعاء هذه الوظيفة في نهاية كل برنامج نصي
// مكالمتها ملفوفة أيضًا في DEV_START وDEV_END

/**
* إنشاء رابط لنتيجة التوصيف وعرضه في وحدة التحكم
*/
الدالة dev_boot_Down() (
إذا (APPLICATION_ENV === "dev") (
// تهيئة نسخة firephp
$firephp = FirePHP::getInstance(true);
// قم بإيقاف تشغيل ملفات التعريف وحفظ البيانات
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing" );
// أنشئ رابطًا لبيانات ملفات التعريف واكتبها في وحدة التحكم
رابط $ = "http://" . $_SERVER["HTTP_HOST" ] . "/includes/ExtProcs/debug/xhprof-0.9.2/xhprof_html/index.php?run=($run_id)&source=xhprof_testing\n";
$firephp->info($link, "Profiling data" );
}
}


* تم تمييز كود المصدر هذا باستخدام Source Code Highlighter.

لن أخوض في تفاصيل تثبيت هذه الملحقات، لأن كل شيء بسيط هنا. سأقول فقط عن بعض جوانب الإعداد. يحتوي xhproof على متغير تكوين واحد فقط - xhprof.output_dir، والذي يشير إلى المجلد الذي سيتم حفظ بيانات ملفات التعريف فيه. ولذلك، تأكد من أن المستخدم الذي يتم من خلاله تنفيذ البرامج النصية PHP لديه حقوق الكتابة إلى الدليل المحدد. لذا اكتب شيئًا كهذا في ملف php.ini الخاص بك:


الامتداد=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

إنها فكرة جيدة أيضًا تثبيت شيء مثل dot أو Graphviz لرسم الرسوم البيانية للاتصال. لدي Graphviz على نظام التشغيل MacOS X.

بعد إكمال الإجراءات الموضحة أعلاه، تمكنا من فتح الملفات التعريفية لأي من البرامج النصية الخاصة بنا وإلقاء نظرة عليها مباشرة في المتصفح في أي وقت.

باستخدام أنظمة ملفات التعريف، يمكنك جمع معلومات حول الوظائف في كود PHP التي تستهلك المزيد من وقت وحدة المعالجة المركزية وذاكرة الوصول العشوائي، أي تحديد الأماكن الأبطأ والأكثر استهلاكًا للذاكرة في برنامج PHP.

com.xhprof

XHProf - ملف تعريف PHP تم تطويره بواسطة Facebook.

تثبيت:

الكفاءة تثبيت php-pear pecl تثبيت xhprof-0.9.4 echo "extension=xhprof.so"> /etc/php5/mods-available/xhprof.ini ln -s /etc/php5/mods-available/xhprof.ini /etc /php5/conf.d/xhprof.ini إعادة تشغيل apachectl

الملفات اللازمة للعمل موجودة في الدليل /usr/share/php. ومع ذلك، ليس كل شيء، ولكن فقط مع كود PHP. للعرض العادي للتقارير، مطلوب jquery وcss. ويمكن الحصول عليها من مستودع جيثب:

استنساخ البوابة https://github.com/facebook/xhprof.git

بعد ذلك، أضف السطر إلى كود PHP النصي في المكان الذي يجب أن يبدأ فيه جمع البيانات:

Xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

تتم الإشارة إلى معلمات جمع البيانات بين قوسين. في هذه الحالة، سيتم جمع البيانات حول تحميل المعالج واستخدام ذاكرة الوصول العشوائي. هناك خيار آخر ممكن XHPROF_FLAGS_NO_BUILTINSعند استخدامها، لا يتم جمع البيانات حول الوظائف المضمنة.

$xhprof_data = xhprof_disable(); include_once "xhprof_lib/utils/xhprof_lib.php"; include_once "xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test"); صدى "التقرير: http://domain.tld/xhprof_html/index.php?run=$run_id&source=xhprof_test"; صدى "\n";

في النسق $run_idتشير علامات الاقتباس إلى اسم ملف التعريف الذي يمكن تعيينه بشكل تعسفي.

تبدو النتيجة المعالجة كما يلي:

إذا قمت بتحديد المعلمة XHPROF_FLAGS_NO_BUILTINSفمن الواضح أن عدد استدعاءات الوظائف قد انخفض بشكل كبير:

يوفر الجدول المعلومات التالية:

المكالمات- عدد استدعاءات الوظائف،
ساعة الجدار- إجمالي وقت تشغيل الوظيفة، بما في ذلك الوقت المستغرق في انتظار الرد من الموارد الخارجية،
وحدة المعالجة المركزية- مقدار الوقت الذي أمضيته في معالجة الوظائف،
MemUse- مقدار ذاكرة الوصول العشوائي المستخدمة،
PeakMemUse- ذروة استهلاك الذاكرة.

المعدلات هي:

بما في ذلك- شامل - مع الأخذ في الاعتبار المكالمات إلى وظائف أخرى من هذه الوظيفة،
غير شامل.- حصري - باستثناء استدعاءات الوظائف.

بالإضافة إلى ذلك، يوجد أعلى الجدول معلومات حول إجمالي وقت المعالجة والذاكرة المستخدمة وعدد استدعاءات الوظائف.

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

للحصول على مثل هذا التقرير، تحتاج إلى استخدام رابط مثل هذا:

http://domain.tld/xhprof_html/index.php?run1=run_id1&run2=run_id2&source=xhprof_test

أين run_id1و run_id2- معرفات الإطلاق.

إذا قمت بتثبيت جراففيز:

الكفاءة تثبيت graphviz

هناك أيضًا واجهات ويب تابعة لجهات خارجية لملف تعريف php xhprof الذي يستخدم قواعد البيانات:

xDebug

xDebug- مصحح أخطاء كود PHP مع إمكانية إنشاء ملفات تعريف، من تأليف Derick Rethans.

تثبيت:

يم تثبيت php5-xdebug

ثم نقوم بتحرير التكوين:

نانو /etc/php5/mods-available/xdebug.ini

إضافة السطور إليها:

Xdebug.profiler_enable = 1 xdebug.profiler_aggregate = في xdebug.profiler_output_dir = /tmp

نقوم هنا بتمكين ملف تعريف PHP وتحديد الدليل الذي سيتم تخزين ملفات التعريف فيه. يتم إنشاء الملفات الشخصية بأسماء مثل ذاكرة التخزين المؤقت.خارج.*

يوجد عميل ويب webgrind: https://github.com/jokkedk/webgrind. إنه لا يعمل بسرعة كبيرة، ولكنه يسمح لك بعرض الملفات الشخصية الصغيرة بسرعة. في الواقع، هذا هو كود PHP الذي يجب استنساخه من جيثب:

استنساخ البوابة https://github.com/jokkedk/webgrind.git

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

Static $dotExecutable = "/usr/bin/dot";

بالإضافة إلى ذلك، يمكنك ضبط المنطقة الزمنية:

Static $defaultTimezone = "أوروبا/موسكو";

في الرأس، يمكنك تحديد ملف تعريف وتحديد المربع لمراعاة الوظائف المضمنة. يعرض الجدول نفسه الوظائف وعدد المكالمات ووقت تشغيل الوظيفة نفسها والوقت بما في ذلك الانتظار. للتعمق أكثر في الوظائف، ما عليك سوى النقر على السهم المثلث. في حالتي، مع ملفات تعريف كبيرة إلى حد ما (من عدة ميغابايت)، كان انتظار النتيجة مرتفعا دون داع. ربما يكون من الأفضل استخدام برامج العرض المحلية للملفات الشخصية الكبيرة إلى حد ما.

قد يبدو الرسم البياني كما يلي:

.لاحظ أن webgrindلا ينبغي استخدامه على خوادم الإنتاج، حيث لا يتم توفير أي ترخيص، ولكن هناك إمكانية الوصول إلى رمز ملف php. إذا لزم الأمر، استخدم ترخيص Apache الأساسي على الأقل.

هناك أيضًا برامج لتحليل الملفات الشخصية لنظام التشغيل Linux:

حول التنميط

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

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

على سبيل المثال، إذا كنت تستخدم إطار عمل، فإن استخدام بعض وظائف إطار العمل قد يؤدي إلى استدعاء العديد من الوظائف الأساسية. إذا كنت تقرأ بعض البيانات عدة مرات، فقد يكون من المفيد تخزين النتيجة في متغير.

يمكن أن يساعدك ملف التعريف أيضًا على فهم مكان استخدام التخزين المؤقت لكود PHP، على سبيل المثال، باستخدام أبكوأو com.memcached.

بادئ ذي بدء، من المفيد تحسين الوظائف التي تتطلب أكبر وقت للتنفيذ. بمجرد تحسين كل شيء، ويبدو أنه لم يتبق شيء لتحسينه، فمن المفيد فرز الوظائف حسب عدد المكالمات والعمل على تقليلها. حتى لو كانت PHP سريعة، فمن المفيد التفكير فيما إذا كنت بحاجة إلى استدعاء الوظائف في كثير من الأحيان؟

إذا واجهت المواقف التالية، فيجب عليك التفكير في التخزين المؤقت:

  • يتم استدعاء الوظائف غير القابلة للتغيير داخل الحلقة،
  • يتم إنشاء بعض المحتوى مرتين،
  • يتم إنشاء المحتوى الذي لا يتغير في كل مرة،
  • يتم إنشاء المحتوى حتى لو لم يتم استخدامه.

لا يجب عليك تخزين كل شيء مؤقتًا، لأن الذاكرة تعد أيضًا موردًا قيمًا. قم بتخزين البيانات التي تصل إليها باستمرار. كما أن التخزين المؤقت ليس له أي معنى إذا كان التخزين المؤقت يهدر موارد أكثر مما يوفر.

بالإضافة إلى التخزين المؤقت في التعليمات البرمجية، لا تنس التخزين المؤقت باستخدام خادم الويب ()، وكذلك من جانب العميل. إذا استخدمت الترويسات الصحيحة، فيمكن حل العديد من الطلبات قبل أن تصل إلى الخادم.

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

XHProf وشوكتها Tideways عبارة عن أداة تعريف مريحة وبسيطة يمكنها جمع إحصائيات حول تشغيل التطبيق بشكل فعال دون أي انخفاض تقريبًا في سرعة التطبيق الخاص بك (أو موقع الويب الخاص بك).

لماذا رمز الملف الشخصي؟

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

يجب أن يأتي ملف تعريف التعليمات البرمجية أولاً في عملية تحسين التطبيق. أي شيء آخر سيكون تخمينًا وعلى الأرجح خاطئًا. عليك أن تعرف بالضبط ما الذي يسبب المشاكل و"الفرامل".

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

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

كيفية توصيل ملف تعريف php تلقائيًا؟

لقد عمل المتخصصون لدينا بجد وجعلوا هذه العملية آلية بالكامل.
كل ما عليك فعله هو تسجيل الدخول، وتحديد النطاق المطلوب في علامة التبويب "النطاقات"، والنقر على أيقونة "PHP.INI + PHP Profiler" وتمكين مربع الاختيار "Domain Profiler".

قد يستغرق تمكين هذه الميزة بعض الوقت، لا يزيد عادةً عن 10 دقائق.

بالنسبة لإصدارات php 5.2، 5.3، 5.4، 5.5، 5.6، 7.0، نستخدم ملف تعريف XHProf، وبالنسبة لإصدارات php 7.1 والإصدارات الأحدث، نستخدم ملف تعريف Tideways.

بمجرد التمكين، في كل صفحة من موقعك تتم معالجتها بواسطة PHP، سيتم إنشاء كتلة خاصة تحتوي على روابط لملف التقرير في الجزء السفلي منها (سيبدو الرابط كما يلي:

Domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX&source=someapp)

وهذا ما سيبدو عليه ملف التقرير:

يحتوي الجدول على قائمة الوظائف التي تم تنفيذها ضمن صفحة واحدة مع معلومات إضافية:

  • المكالمات - عدد ونسبة استدعاءات الوظائف
  • بما في ذلك. Wall Time - وقت تنفيذ دالة ذات وظائف متداخلة
  • غير شامل. Wall Time - وقت تنفيذ الوظيفة بدون وظائف متداخلة
  • بما في ذلك. وحدة المعالجة المركزية - وقت المعالج مع الوظائف المتداخلة
  • غير شامل. وحدة المعالجة المركزية - وقت المعالج بدون وظائف متداخلة
  • بما في ذلك. MemUse - استهلاك الذاكرة مع الوظائف المتداخلة
  • غير شامل. MemUse - استهلاك الذاكرة بدون وظائف متداخلة
  • بما في ذلك. PeakMemUse - الحد الأقصى لاستهلاك الذاكرة مع الوظائف المتداخلة
  • غير شامل. PeakMemUse - الحد الأقصى لاستهلاك الذاكرة بدون وظائف متداخلة

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

التقارير الرسومية


يتم تمييز أقسام التعليمات البرمجية كثيفة الاستخدام للموارد باللون الأصفر (متوسط) والأحمر (الأثقل). هذه هي أقسام التعليمات البرمجية التي تستخدم الكثير من الموارد مقارنة ببقية البرنامج. قد تكون هذه وظيفة بطيئة واحدة أو عدة استدعاءات لوظيفة سريعة. في مثالنا، نرى أن الدالة mysqli_multi_query() محددة باللون الأحمر لأنها تعمل بشكل أبطأ.

تقارير مجمعة

تتيح لك واجهة XHProf أيضًا عرض المعلومات المجمعة من تقارير متعددة في وقت واحد. للقيام بذلك، يتم تمرير run_id مفصولاً بفواصل:

Domain-name.com/xhprof-master/xhprof_html/index.php?run=XXXXXXXXXXXX,YYYYYYYYYYY&source=someapp

ميزات تقنية

    يتم تنفيذ التضمين التلقائي لملف التعريف باستخدام التوجيهين auto_append_file وauto_prepend_file، اللذين يربطان ملفين php قابلين للتنفيذ:

    - يقوم auto_append_file بتهيئة كائن مجموعة الإحصائيات وبدء عمله؛

    - يكمل ملف auto_prepend_file مجموعة الإحصائيات وينشئ ملف تقرير يحتوي على إحصائيات (بتنسيق JSON)؛

    إذا تم استدعاء exit() أو die() أثناء تشغيل البرنامج النصي الخاص بك، فلن يتم تنفيذ ملف auto_prepend_file. لن يتم إنشاء ملف الإحصائياتولن يتم تضمين كتلة تحتوي على روابط لملف التقرير في أسفل الصفحة.

  1. وبالتالي، فإن الوصول إلى أي صفحة تمت معالجتها بواسطة php سيؤدي إلى إنشاء ملف تقرير جديد، لذلك نوصي بتعطيل ملف التعريف بعد جمع الإحصائيات (عادةً بضع ساعات)، لتجنب تجاوز سعة القرص، والتي قد يتم استنفادها بعد إنشاء ملف عدد كبير من التقارير!
  2. هام: لن يعمل ملف التعريف إلا إذا كان الموقع متصلاً بالخادم عبر مسار قياسي، وبوسائل تلقائية (أي باستخدام لوحة تحكم الاستضافة)، وإلا فستحتاج إلى الاتصال بالدعم الفني في Hostland لتكوين ملف التعريف.
  3. في الوضع التلقائي، يتصل منشئ ملفات التعريف باسم المجال الرئيسي فقط؛ ولا يتصل منشئ ملفات التعريف تلقائيًا بالنطاقات الفرعية.
  4. في الوضع التلقائي، يقوم منشئ ملفات التعريف بجمع إحصائيات فقط للنصوص البرمجية ذات الامتداد .php و.php5
  5. لا يمكن ضمان تشغيل الموقع دون انقطاع بعد توصيل ملف تعريف PHP، وبالتالي، إذا لم يعمل الموقع بشكل صحيح أثناء تمكين ملف التعريف، فيجب تعطيله ومتابعة التوصيف بوسائل أخرى.

دعونا نلخص ذلك

نأمل أن تساعدك هذه الأداة في جعل مواقعك أسرع على استضافة Hostland.

استخدمت المقالة جزئيًا مواد من المستخدم Den Golotyuk المنشور على الموقع

منشورات حول هذا الموضوع