Es gibt ein berühmtes 80-20-Gesetz in der Wirtschaft, das in der Programmierung zitiert wird: 80 % der Leistungsengpässe werden durch 20 % des Codes verursacht. Mit Hilfe der XDebug-Erweiterung von PHP können diese 20 % des Codes effektiv gefunden werden.
1. Installation und Konfiguration
1. Laden Sie die XDebug-Erweiterung für PHP herunter unter: http://xdebug.org/
2. Kompilieren und installieren Sie XDebug unter Linux
tar -xzf xdebug-2.0.0RC3.gz cd xdebug-2.0.0RC3 /usr/local/php/bin/phpize ./configure --enable-xdebug cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/
Hinweis: /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/ Verschiedene PHP-Versionen haben unterschiedliche Pfade und müssen nicht hier platziert werden Pfad. Sie können den Speicherort von xdebug.so in zend_extension_ts angeben.
vi /usr/local/php/lib/php.ini
Ändern Sie php.ini, entfernen Sie das PHP-Beschleunigungsmodul und fügen Sie die folgenden Konfigurationsinformationen hinzu, um die XDebug-Erweiterung zu unterstützen
[Xdebug] zend_extension_ts="/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so" xdebug.profiler_enable=on xdebug.trace_output_dir="/tmp/xdebug" xdebug.profiler_output_dir="/tmp/xdebug" xdebug.profiler_output_name="script" mkdir -p /tmp/xdebug chmod 755 /tmp/xdebug chown www:www /tmp/xdebug /usr/local/apache/bin/apachectl -k restart
3. http:/ /sourceforge.net/projects/wincachegrind/
2. Analyseprozess
1 Besuchen Sie Ihre Website, klicken Sie mehrmals auf verschiedene Links auf der Startseite, XDebug wird im / generiert. tmp/xdebug-Verzeichnis Die folgenden Dateien:
usr_local_apache_htdocs_app_checknum_chknum_php_cachegrind.out usr_local_apache_htdocs_app_login_showHeaderLogin_php_cachegrind.out usr_local_apache_htdocs_app_play_play_php_cachegrind.out usr_local_apache_htdocs_app_user_member_php_cachegrind.out usr_local_apache_htdocs_tag_tags_php_cachegrind.out usr_local_apache_htdocs_top_top_php_cachegrind.out
2. Kopieren Sie die oben genannten Dateien nach Windows und verwenden Sie die Client-Software WinCacheGrind, um jede Datei zu öffnen. Es wurde festgestellt, dass die Ausführung des folgenden PHP-Programms am längsten dauert :
/usr/local/apache/htdocs/tag/tags.php 耗时840ms
3. Analyseergebnisse:
1 🎜>(1) Zeitaufwändig Die längste filter_tags-Funktion erscheint in Zeile 158 von /usr/local/apache/htdocs/tag/tags.php:
(2) Die filter_tags-Funktion wird zitiert aus / usr/local/apache/htdocs /include/misc.php, die Funktion getForbiddenTags wird 21 Mal von der Funktion filter_tags aufgerufen. Der meiste Zeitaufwand für die Funktion filter_tags wird durch die Funktion getForbiddenTags verursacht. Der Inhalt der getForbiddenTags-Funktion lautet wie folgt:
(3) Die Analyse der getForbiddenTags-Funktion zeigt, dass die PHP-Funktion trim 16827 Mal aufgerufen wurde.$tags .= filter_tags($videos[$i]['tags'])." ";
function getForbiddenTags() { $tagsPath=TEMPLATE_FILE_PATH."tags/forbidden_tags.txt"; if(file_exists($tagsPath)) { $fp = fopen($tagsPath, "r"); $arrconf = array (); if ($fp) { while (!feof($fp)) { $line = fgets($fp, 1024); $line = trim($line); $rows = explode("#", $line); $coumns = explode("=", trim($rows[0])); if(""!=trim($coumns[0])) { $arrconf[trim($coumns[0])] = trim($coumns[1]); } } } return $arrconf; } }
(4) Mögliche Gründe für den Engpass:
Die 156 zu filternden Schlüsselwörter werden zeilenweise in /usr/local/apache/template gespeichert / In der Datei tags/forbidden_tags.txt ist die Textdatenbank nicht effizient.
Die zeilenweise Lesefunktion fgets und die Funktion trim, die Leerzeichen auf beiden Seiten einer Zeichenfolge oder bestimmter Zeichen entfernt, sind unter hoher Last ineffizient. Sie können Dateilesefunktionen wie fopen, fread, testen. und fscanf. Vergleichen Sie es.