Heim > Artikel > Backend-Entwicklung > Leistungstests des PHP-Archivs Phar
Dieser Artikel stellt hauptsächlich den Leistungstest des PHP-Archivs phar vor, der einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.
PHP hat das PHAR-Archiv hinzugefügt Das Konzept der Phar-Archive basiert auf dem JAR-Archiv der Java™-Technologie, das es ermöglicht, Anwendungen in einer einzigen Datei zu packen, die alles enthält, was zum Ausführen der Anwendung erforderlich ist. Diese Datei unterscheidet sich von einer einzelnen ausführbaren Datei, die normalerweise von einer Programmiersprache wie C generiert wird, darin, dass es sich bei der Datei tatsächlich um eine Archivdatei und nicht um eine kompilierte Anwendung handelt. Die JAR-Datei enthält also tatsächlich die Dateien, aus denen die Anwendung besteht, diese Dateien werden jedoch aus Sicherheitsgründen nicht sorgfältig differenziert. Die Phar-Erweiterung basiert auf einem ähnlichen Konzept, ist jedoch hauptsächlich für die Webumgebung von PHP konzipiert. Außerdem können Phar-Archive im Gegensatz zu JAR-Archiven von PHP selbst verarbeitet werden, sodass keine zusätzlichen Tools erforderlich sind, um sie zu erstellen oder zu verwenden. Phar-Erweiterungen sind kein neues Konzept für PHP. Es wurde ursprünglich in PHP geschrieben und hieß PHP_Archive, bevor es 2005 zur PEAR-Bibliothek hinzugefügt wurde. In der Praxis waren reine PHP-Lösungen für dieses Problem jedoch sehr langsam, weshalb es 2007 als reine C-Spracherweiterung umgeschrieben wurde und Unterstützung für das Durchlaufen von Phar-Archiven mithilfe der ArrayAccess-Objekte von SPL hinzugefügt wurde. Seitdem wurde viel daran gearbeitet, die Leistung von Phar zu verbessern. Derzeit ist die Verwendung von Phar sehr begrenzt und es gibt nur sehr wenige Leistungstests für Phar ein einfaches Experiment.
Testumgebung:
PHP: 5.5.10
CPU: 2 GHz Intel Core i7
Speicher: 8 GB
System: Darwin 13.1.0
Haupttestpunkte:
1: Phar-Ladegeschwindigkeit
1.1: Welchen Einfluss hat die Dateigröße?
1.2: Auswirkungen von include/require?
1.3: Welche Auswirkungen hat der Phar-Stub-Inhalt?
2: Phar-Code-Ausführungsgeschwindigkeit
2.1 Vergleich globaler Funktionen
2.2 Klassenobjekte
2.3 Klassenmethoden
Um sicherzustellen, dass der Test so genau wie möglich ist, wird jede Methode ausgeführt 3 Mal, und der Durchschnitt der 3 Mal ist der Wert. Gleichzeitig verwenden wir zum Vergleich direkt Code, um Benchmark-Daten zu erhalten. Die
Phar-Datei enthält hauptsächlich die Datei
phar-builder.php, die zum Generieren der Phar-Datei verwendet wird. Führen Sie diese Datei aus, um die Phar-Datei zu generieren phar-test.phar-Datei.
test_load.php testet die Geschwindigkeit des Ladens von Phar-Dateien
Die im src-Verzeichnis enthaltene Datei index.php ist eine Stub-Datei, einschließlich date.php, for.php, function.php, Datumstestdatei-Klassenmethode, for.php Testobjektmethoden, Functions.php Testfunktionsmethoden.
Spezifischer Anhangscode.
Erstens: Phar-Ladegeschwindigkeit. Zum Testen habe ich die Methoden include und require verwendet und festgestellt, dass es keinen großen Unterschied gibt. Es wird nur die Methode require verwendet.
$stime = microtime(true); require './phar-test.phar'; $etime = microtime(true); $total = $etime - $stime; echo "phar total:".$total."s";
Nach der Ausführung ist die Effizienz wie folgt
localhost:phar ugg$ php test_phar_load.php phar total:0.0044760704040527s localhost:phar ugg$ php test_phar_load.php phar total:0.0051448345184326s localhost:phar ugg$ php test_phar_load.php phar total:0.0043849945068359s localhost:phar ugg$ vim test_phar_load.php
Die durchschnittliche Belastung beträgt 4,7 Millisekunden
Im Vergleich mit der direkten Quellcode-Referenzmethode.
$stime = microtime(true); require './src/index.php'; $etime = microtime(true); $total = $etime - $stime; echo "src total:".$total."s\n";
Nach der Ausführung ist die Effizienz wie folgt
localhost:phar ugg$ php test_src_load.phpsrc total:0.0026230812072754s localhost:phar ugg$ php test_src_load.phpsrc total:0.0026969909667969s localhost:phar ugg$ php test_src_load.phpsrc total:0.0025439262390137s
Der durchschnittliche Ladevorgang beträgt 2,6 Millisekunden
Fazit: Durch den Vergleich der Ladegeschwindigkeit beträgt die Die Phar-Lademethode ist besser als die direkte Dateilademethode. Sie ist viel langsamer und fast doppelt so lang wie das direkte Referenzieren der Datei. Gleichzeitig habe ich einige Interferenzdateien in die Phar-Datei geladen, um die Phar-Datei zu vergrößern. Ich habe festgestellt, dass sich die Ladezeit innerhalb von 10 KB nicht wesentlich geändert hat. Natürlich habe ich die neu hinzugefügten Dateien nicht in den Stub eingefügt. Der Zweck besteht darin, dass bei Verzeichnissen mit mehr als 10 KB die Dateiorganisationsmethode beispielsweise Autoload ist und nicht alle Dateien in einer Datei enthalten sind. Die Phar-Ladezeit beträgt etwa das 1,8-fache der SRC-Direktladezeit.
Zweitens: Test der Ausführungsgeschwindigkeit
Phar-Methode, der Code lautet wie folgt
$stime = microtime(true); //require 'phar://phar-test.phar'; require 'phar-test.phar'; $sstime = microtime(true); for($i = 0; $i<10000; ++$i){ $date = dates::next_week(); $for = new fortest(); $i = $for->for1to10000(); $number = number2Chinese('12345'); } $eetime = microtime(true); $etime = microtime(true); $total = $etime - $stime; $total2 = $eetime - $sstime; echo "phar load total:".$total."s\n"; echo "phar execution 10000 total:".$total2."s";
Die Ausführungseffizienz ist wie folgt
localhost:phar ugg$ php test_phar_functions.php phar load total:0.0047600269317627s phar execution 10000 total:0.00017499923706055s localhost:phar ugg$ php test_phar_functions.php phar load total:0.004863977432251s phar execution 10000 total:0.00017404556274414s localhost:phar ugg$ php test_phar_functions.php phar load total:0.004680871963501s phar execution 10000 total:0.00016689300537109s
Für Klassenmethoden, Objektinstanzen, Objektmethoden und Funktionsmethoden, die 10.000 Mal ausgeführt werden, beträgt der Gesamtzeitverbrauch 0,17 Millisekunden.
src-Ausführungseffizienz
localhost:phar ugg$ php test_src_functions.php phar load total:0.0029089450836182s phar execution 10000 total:0.00019693374633789s localhost:phar ugg$ php test_src_functions.php phar load total:0.0028579235076904s phar execution 10000 total:0.0002140998840332s localhost:phar ugg$ php test_src_functions.php phar load total:0.0029168128967285s phar execution 10000 total:0.00019478797912598s
Führen Sie Klassenmethoden, Objektinstanzen, Objektmethoden und Funktionsmethoden 10.000 Mal aus. Der Gesamtzeitverbrauch beträgt 0,20 Millisekunden.
Zusammenfassung: Durch den Vergleich der Ausführungsgeschwindigkeit wurde festgestellt, dass die Ausführungsgeschwindigkeit der Phar-Methode schneller ist als die der direkten Datei-Include-Methode (0,20-0,17)/0,20*100=15 % Die spezifische Ausführungsgeschwindigkeit Der Grund dafür wurde nicht gefunden. Es gibt einige Informationen zur Ausführungsgeschwindigkeit von phar, wenn apc+include_path festgelegt ist. https://github.com/ralphschindler/test-phar-performance-apc/.
Zusammenfassung: Die Ladegeschwindigkeit der PHP-Archivierungs-Phar-Methode ist langsamer als die der normalen Dateieinbindungsmethode, aber die Ausführungsgeschwindigkeit ist höher als die der Dateieinbindungsmethode, wenn Sie mit der Einstellung include_path und der APC- oder OP-Methode zusammenarbeiten, um das Laden zu optimieren Geschwindigkeit des Phar-Archivs, es kann die PHP-Ausführungsgeschwindigkeit verbessert werden. Der nächste Schritt besteht darin, einige Versuche zu unternehmen: 1: Erstellen Sie eine große Phar-Datei und experimentieren Sie mit der Lade- und Ausführungsgeschwindigkeit. 2: Verstehen Sie das Phar-Ladeprinzip und das Ausführungsprinzip. 3: Paketkonzeptverwaltung und Abhängigkeiten.
Das obige ist der detaillierte Inhalt vonLeistungstests des PHP-Archivs Phar. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!