Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse + Optimierung von PHP-Leistungsproblemen

Analyse + Optimierung von PHP-Leistungsproblemen

little bottle
little bottlenach vorne
2019-04-19 18:03:572442Durchsuche

In diesem Artikel geht es um die Analyse und Optimierung von PHP-Leistungsproblemen. Interessierte Freunde können vorbeikommen und mehr erfahren!

Unter welchen Umständen treten PHP-Leistungsprobleme auf?
1 Unsachgemäße Verwendung der PHP-Syntax
2 Die PHP-Sprache kann Dinge nicht tun, in denen sie nicht gut ist
3 Die mit der PHP-Sprache verbundenen Dienste sind nicht leistungsstark
4 PHP selbst hat Mängel
5 Probleme, von denen ich auch nichts weiß

Analyse von Leistungsproblemen

PHP-Leistungsprobleme machen 10 % des gesamten Projekts aus Leistungsprobleme Der Anteil beträgt weniger als 50 %

Leistungsoptimierungsprojekte, beschränken Sie sich nicht auf die Optimierung von PHP

PHP-Leistungsoptimierung auf Sprachebene
|
|
PHP-Peripheriegeräte Die Leistungsoptimierung des Problems |
| Einführung



Apache Benchmark (ab) (Sie können es selbst herunterladen)
ab ist eine von Apache bereitgestellte Stresstestsoftware, die bei der Installation enthalten ist Apache-Server.


Wie benutzt man? ./ab -n1000 -c100 http://www.baidu.com/ -n Anzahl der Anfragen

— -c Anzahl der Parallelität

  URL Target Stresstest-Adresse




Demonstration der Verwendung des PHP-Stresstest-Tools




Konzentrieren Sie sich hauptsächlich auf as möglichst viele Parallelitäten pro Sekunde

Die Anfrage benötigt so wenig Zeit wie möglich
Mehr PHP-eigene Fähigkeiten nutzen Optimierung: Weniger Code schreiben, mehr PHP-eigene Fähigkeiten nutzen
Leistungsprobleme: Selbst Der Code weist viel Redundanz, schlechte Lesbarkeit und geringe Leistung auf

Warum ist die Leistung gering?
PHP-Code muss für jede Anfrage kompiliert und geparst werden, was kostspielig ist.

Gute Methode:
Mehr Nutzen aus den integrierten variablen Konstantenfunktionen von PHP

Codevorbereitung für PHPs eigenen Fähigkeitsleistungstest


PHP-Code-Ausführungsprozess


*.php ---Scanner---> Exprs -----Parser--->Opcodes---Exec--->Output




Leistungstest zwischen in PHP integrierten Funktionen



Optimierungspunkt: Leistungsvor- und -nachteile von in PHP integrierten Funktionen

Situationsbeschreibung : Integrierte PHP-Funktionen, Es gibt immer noch Unterschiede in der Blocklangsamkeit zwischen
Gute Vorschläge: Erfahren Sie mehr über die zeitliche Komplexität der integrierten PHP-Funktionen
Codetest für Leistungstests zwischen PHP-integrierten Funktionen in Funktionen



isset($arr[$i]); //Durchschnittlich 50ms
array_key_exists($i,$arr);//Durchschnittlich 85ms


PHP reduzieren Verwendung von Magic-Funktionen

Situationsbeschreibung: Die von PHP bereitgestellten Magic-Funktionen weisen eine schlechte Leistung auf
Warum ist die Leistung gering? Um PHP-Programmierern Ärger zu ersparen, hat die PHP-Sprache viel für Sie getan

Gute Methoden Vermeiden Sie so weit wie möglich die Verwendung magischer PHP-Funktionen




PHP deaktiviert den Fehlerunterdrücker

@Die eigentliche Logik

Vor dem Anfang des Codes und nach dem Ende hinzufügen. Opcode ignoriert Fehler

php -dv|d.active=1 -dv|d.execute=0 at.php

Ich möchte nur nachsehen und möchte nicht wirklich ausführen

PHP – Angemessene Nutzung von Speicher und regulären Ausdrücken

Optimierungspunkt: Angemessene Nutzung von Speicher

PHP verfügt über einen Speicher-Recycling-Mechanismus, um das Endergebnis zu garantieren, aber bitte gehen Sie auch sorgfältig mit dem Speicher um

Guter Rat
Verwenden Sie unset(), um ungenutzten Speicher rechtzeitig freizugeben (Hinweis: unset() kann nicht abgemeldet werden können)


Versuchen Sie, so wenig wie möglich zu verwenden. Verwenden Sie reguläre Ausdrücke.

Der Overtrack für reguläre Ausdrücke ist relativ groß.

Guter Vorschlag:
Verwenden Sie String-Verarbeitungsfunktionen, um dieselbe Logik zu implementieren


PHP – Vermeiden Sie Berechnungen innerhalb der Schleife

Optimierungspunkt: Vermeiden Sie Berechnungen innerhalb der Schleife

Situationsbeschreibung:
Berechnungsformeln innerhalb der Schleife werden wiederholt berechnet

Codebeispiel:
                                                                  & für Szenarien

Geeignet für die Verbindung von Webservern und Hintergrunddiensten, UI-Präsentation


PHP – achten Sie darauf, Anführungszeichenketten als Schlüsselwerte zu verwenden

PHP behandelt Schlüsselwerte ​​ohne Anführungszeichen als Konstanten, was zu einem Mehraufwand bei der Suche nach Konstanten führt

Strings in Anführungszeichen unbedingt als Schlüsselwerte verwenden




Analyse und Erklärung von Problemen rund um PHP



Was sind die Peripheriegeräte von PHP?

Linux-Betriebssystemumgebung PHP Festplatte (Dateispeicherung) Datenbank (z. B. MySQL) Caching-Netzwerk


Analyse der Auswirkungen von PHP-Peripheriegeräten auf PHP-Programme



Reduzierung von DateitypoperationenOverhead-Reihenfolge gängiger PHP-Szenarien:Lesen und Datenträger schreiben Datenbank lesen und schreiben Netzwerkdaten lesen und schreiben

Speicher lesen und schreiben< Datenträger lesen und schreiben



Reduzieren Sie von PHP initiierte Netzwerkanfragen



Fallstricke von Netzwerkanfragen:
1 Unsichere Faktoren der Schnittstelle der anderen Partei
2 Netzwerkstabilitätsleistung
Netzwerkanfragen optimieren

1 Timeout festlegen
Verbindungs-Timeout 200 ms
Lese-Timeout 800 ms
Schreib-Timeout 500 ms
 
2 Serielle Anfragen parallelisieren 1 curl_multi_ *() 2 Swoole-Erweiterung verwenden
curl_multi_*() ist nicht sehr gut, da es auf der längsten Rückgabezeit basiert

curl_multi_add_handle Fügen Sie dem Curl-Stapel ein separates Curl-Handle hinzu session
curl_multi_close Eine Gruppe von cURL-Handles schließen
curl_multi_exec Eine Unterverbindung des aktuellen cURL-Handles
ausführencurl_multi_getcontent Wenn CURLOPT_RETURNTRANSFER gesetzt ist, den erhaltenen Ausgabetextstrom zurückgeben
curl_multi_info_read Die relevanten Übertragungsinformationen der aktuell analysierten cURL abrufen
curl_multi_remove_handle Eine Handle-Ressource in der Handle-Ressource der Curl-Batchverarbeitung entfernen
curl_multi_ select wait for all Active Verbindungen im cURL-Batch
curl_multi_setopt Legen Sie eine Option für das cURL-Multi-Handle fest
curl_multi_strerror – Rückgabezeichenfolge, die den Fehlercode beschreibt


Empfohlene Swoole-Erweiterung


Vor- und Nachteile der Komprimierung der PHP-Ausgabe
Komprimierung der Ausgabe der PHP-Schnittstelle
Wie komprimiere ich?

Verwenden Sie Gzip

Vorteile: Fördert unsere Datenausgabe, der Client kann Daten schneller abrufen
Nachteile: Zusätzlicher CPU-Overhead

PHP-Cache-Wiederverwendung

Unter welchen Umständen sollte der Ausgabeinhalt zwischengespeichert werden?
Mehrere Anfragen, Inhalt bleibt unverändert


Smarty-Tuning und überlappende Zeitfenster-Ideen

Smarty aktiviert Caching

Überlappende Zeitfenster-Ideen

Seriell:
Prozess1 Prozess2 Prozess3 Prozess4

Überlappende Zeitfenster:

Prozess1
Prozess2
Prozess3
Prozess4

Der nächste Wenn a Die Aufgabe hängt nicht stark von der vorherigen Aufgabe ab. Sie können die Überlappungszeit verwenden.


PHP-Bypass-Verarbeitungslösung

Im Allgemeinen normal: x.php -> Prozess1 ->Prozess2 ->Prozess4->

Bypass-Lösung: x.php ->Prozess1 ->Prozess3 ( Gleichzeitig) -->Process4->

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonAnalyse + Optimierung von PHP-Leistungsproblemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen