2017-12-08 10 views
-1

Ich benutze PHP 5.6.3. Einer meiner professionellen Projekt umfasst eine dezip Funktion:PHP - Zip extractTo() Leistung

// ZIP file to extract 
$my_file = "repository.zip"; 

$zip = new ZipArchive; 
if ($zip->open($my_file) === TRUE) 
{ 
    //Unpack all files from zip 
    $zip->extractTo($this->target_directory); 
} 

$zip->close(); 

..., die auf einer großen ZIP-Datei (~ 300Mo) verarbeitet wird.

Ich habe viele excution time Benchmark gemacht und ich fand, dass die extractTo() - Funktion mehr als 90%/95% (20sek.) Der gesamten Verarbeitungszeit ist! Am schlimmsten ist, dass die ZIP-Größe in den nächsten Wochen zunehmen wird (vielleicht bis zu 500 Mo).

Gibt es eine Möglichkeit, diesen Teil meines Skripts zu optimieren? Wissen, dass Ich habe, um alle Dateien aus dem ZIP extrahieren.

Danke.

+0

Wer erstellt die Zip-Datei? Die Verwendung einer "schnelleren" Komprimierung führt im Allgemeinen zu einer schnelleren Dekomprimierung. –

+1

Benchmark-Befehlszeile/usr/bin/unzip ./repository.zip -d. - nicht sicher, warum du es in PHP machst. –

+0

@SalmanA Die ZIP-Datei wird von einer anderen Symfony-Anwendung generiert: "$ this-> zipArchive-> open (" repository.zip ", \ ZipArchive :: CREATE)" + "$ this-> zipArchive-> addFile()". – Paolito75

Antwort

1

Gibt es eine Möglichkeit, diesen Teil meines Skripts zu optimieren?

Nein - es ist eine einzige Zeile Code, einmal aufgerufen. Es sollte offensichtlich sein, dass es keine Möglichkeit gibt, es zu optimieren.

Ich vermute, was Sie wirklich wissen wollen, ist, wenn Sie die Datei entpackten Sohn bekommen können - und das ist eine ganz andere Frage.

die extractTo() -Funktion ist mehr als 90%/95% (20sec.) Der Gesamtverarbeitungszeit

der verstrichenen Zeit? CPU-Zeit? PHP Ausführungszeit?

Möglicherweise gibt es Spielraum für schnellere Ergebnisse, aber Sie stellen nicht die richtigen Fragen. Sie werden hier keine Lösung finden - wir haben keinen Zugang zu Ihrem System, um es für Sie zu reparieren.

Da Sie uns nichts über das Betriebssystem und die Hardware gesagt haben, auf denen wir uns befinden, sind wir in den Ratschlägen, die wir geben können, weiter eingeschränkt. Der Wechsel zu einer schnelleren CPU könnte helfen - aber basierend auf den von Ihnen bereitgestellten Informationen wissen wir nicht, ob hier die CPU oder der Speicher-I/O der Engpass ist. Wie Sie das ganze System schneller machen, würde ein großes Buch füllen (ich weiß, ich habe eines geschrieben).

Die Extraktion außerhalb von PHP könnte helfen.

Die Verwendung eines anderen Komprimierungsalgorithmus könnte hilfreich sein.

Das Erstellen mehrerer Dateien und paralleles Entpacken würde wahrscheinlich helfen.

.... aber Sie haben uns auch nichts über die Einschränkungen hier gesagt.

+0

Hallo @symcbean, weil ich kein Sysadmin sondern nur Entwickler bin, habe ich keine Kenntnisse und Fähigkeiten in Server/Infrastruktur.Ich hatte gehofft, dass die native PHP-Klasse von ZipArchive einige Parameter oder Methoden zur Optimierung in bestimmten Fällen haben könnte: Sie haben mir gesagt, dass dies nicht der Fall ist. 20 Sekunden -> PHP Ausführungszeit habe ich mit microtime() vor und nach der extractTo() Funktion bekommen. – Paolito75