Heim  >  Artikel  >  Backend-Entwicklung  >  Leistungstests des PHP-Archivs Phar

Leistungstests des PHP-Archivs Phar

不言
不言Original
2018-05-31 14:30:351919Durchsuche

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(&#39;12345&#39;);
    }   
    $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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn