Bei der Verarbeitung von Binärdaten in PHP können zwei häufig verwendete Methoden die integrierte Pack () -Funktion und das manuelle Spleißen von Zeichenfolgen verwenden (unter Verwendung von String-Operationen zum Kombinieren von Binärdaten). Viele Entwickler werden sich in der tatsächlichen Entwicklung wundern: Ist die Ausführungseffizienz von Pack () wirklich höher als manuelles Spleißen? In diesem Artikel werden Codetests verwendet und einige einfache Leistungstests kombiniert, um alle dieses Problem zu klären.
Pack () ist eine integrierte PHP-Funktion, mit der Daten im angegebenen Format in binäre Zeichenfolgen verpackt werden. Die Formatparameter sind flexibel und direkt.
Manuelles Spleißen besteht darin, Binärdaten manuell unter Verwendung von String -Funktionen (z. B. CHR () , Bitoperationen usw.) zu konstruieren.
Beide können ähnliche Effekte in Bezug auf die Funktion erzielen, aber die Implementierungsmethode unterscheidet sich von der zugrunde liegenden Verarbeitung.
Wir werden den Zeitaufwand von zwei Methoden beim Verpacken großer Datenmengen testen. Das spezifische Beispiel besteht darin, eine große Anzahl von 32-Bit-Ganzzahlen als Beispiel zu verpacken. Die Tests sind unterteilt in:
Packen Sie eine einzelne Ganzzahl mit Pack ('n', $ num) ein.
Verwenden Sie CHR (), um Bitoperationen zu kombinieren, um vier Bytes manuell zu spleißen.
Die Codes werden alle 1 Million Mal in einer Schleife ausgeführt, was den Zeitunterschied aufzeichnet.
<?php
$iterations = 1000000;
$numbers = range(0, $iterations - 1);
// prüfen pack() Pack
$startPack = microtime(true);
$resultPack = '';
foreach ($numbers as $num) {
$resultPack .= pack('N', $num);
}
$endPack = microtime(true);
$timePack = $endPack - $startPack;
// prüfen手动拼接
$startManual = microtime(true);
$resultManual = '';
foreach ($numbers as $num) {
$resultManual .= chr(($num >> 24) & 0xFF);
$resultManual .= chr(($num >> 16) & 0xFF);
$resultManual .= chr(($num >> 8) & 0xFF);
$resultManual .= chr($num & 0xFF);
}
$endManual = microtime(true);
$timeManual = $endManual - $startManual;
// Ausgangsergebnis
echo "<code>pack() Methoden brauchen Zeit: {$timePack} Zweite\n</code>";
echo "<code>手动拼接Methoden brauchen Zeit: {$timeManual} Zweite\n</code>";
?>
In mehreren Tests finden Sie normalerweise:
Pack () führt etwas schneller aus, insbesondere im Zusammenhang mit komplexen Formaten und großen Datenanschlüssen.
Die manuelle Nähte ist aufgrund der Verkettung mehrerer Saiten und Bitvorgänge etwas weniger effizient.
Die Lücke zwischen den beiden ist jedoch nicht besonders groß, und der manuelle Spleißcode ist relativ lang und anfällig für Fehler.
Pack () ist die in C -Sprache implementierte zugrunde liegende Funktion. Speicher- und CPU -Optimierung während der Ausführung sind auf PHP -Ebene effizienter als String -Operationen. Obwohl das manuelle Nähte intuitiv ist, wird jedes Mal, wenn Sie die Zeichenfolge anschließen, eine neue Kopie der Zeichenfolge (PHP -Zeichenfolge unveränderliche Funktion), was zu einer Leistungsverschlechterung führt.
Es wird empfohlen, Pack () zu verwenden , das präzise Code und hohe Lesbarkeit und Leistungsvorteile hat.
Manuelles Nähte wird nur berücksichtigt, wenn die extreme Leistungsstimmung und eine sehr akribische Kontrolle der zugrunde liegenden Bytes.