Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung der PHP-Komprimierungsfunktion: Vergleich von gzencode, gzdeflate und gzcompress

Implementierung der PHP-Komprimierungsfunktion: Vergleich von gzencode, gzdeflate und gzcompress

高洛峰
高洛峰Original
2016-10-17 10:55:171290Durchsuche

gzencode verwendet standardmäßig die ZLIB_ENCODING_GZIP-Kodierung und das gzip-Komprimierungsformat. Es verwendet tatsächlich den Defalte-Algorithmus, um Daten zu komprimieren, und fügt dann Dateiheader und adler32-Überprüfung hinzu.

gzdeflate verwendet standardmäßig die ZLIB_ENCODING_RAW-Kodierung und verwendet das Deflate Der Datenkomprimierungsalgorithmus verwendet tatsächlich zuerst die LZ77-Komprimierung und verwendet dann die Huffman-Codierung zum Komprimieren. Standardmäßig wird die ZLIB_ENCODING_DEFLATE-Codierung verwendet, und tatsächlich wird Deflate verwendet Komprimieren Sie die Daten und fügen Sie dann den Zlib-Header und die CRC-Korrektur hinzu.

Der Vergleich dieser drei Funktionen ist im Wesentlichen ein Vergleich von drei Komprimierungsmethoden: Deflate, Zlib und Gzip.

Aus Sicht der Leistung: Deflate ist besser als gzip und besser als zlib

Aus Sicht der Standardkomprimierungsrate von Textdateien nach der Komprimierung: Deflate ist besser als zlib und besser als gzip

Die Autoren von gzip und zlib unter diesen drei Algorithmen sind Jean-Loup Gailly und Mark Adler.

Diese beiden Algorithmen und das Grafikformat PNG verwenden den Deflate-Algorithmus.

Der Deflate-Algorithmus ist ein verlustfreier Datenkomprimierungsalgorithmus, der sowohl den LZ77-Algorithmus als auch die Huffman-Codierung verwendet.

Es wurde ursprünglich von Phil Katz für Version 2 seines PKZIP-Archivierungstools und später in der RFC 1951-Spezifikation definiert.

Der Implementierungsprozess der Komprimierung und Dekomprimierung des Deflate-Algorithmus finden Sie in der Komprimierungsbibliothek zlib.

Die Komprimierungsimplementierung von PHP basiert auf zlib, einer Funktionsbibliothek, die die Komprimierungsmethoden deflate, zlib und gzip bereitstellt.

Die oben genannten drei Funktionen verwenden wir. Wenn die Codierung in den Parametern auf dieselbe geändert wird und die Komprimierungsrate auf dieselbe eingestellt ist, wird letztendlich dieselbe Funktion aufgerufen, und der Effekt und die Leistung sind gleich Dasselbe.

Die zlib-Implementierung von PHP existiert im Verzeichnis ext/zlib als Erweiterung. Die drei Funktionen von deflateInit2() deflate() deflateEnd() arbeiten zusammen, um die Komprimierungsfunktion abzuschließen, und die drei Funktionen von inflateInit2() inflate() inflateEnd() arbeiten zusammen, um die Dekomprimierungsfunktion abzuschließen. Die Komprimierung wird letztendlich über die Funktion php_zlib_encode aufgerufen. Zusätzlich zur Eingabezeichenfolge, der Komprimierungsrate und der Ergebnisausgabe sind die verschiedenen Eingabeparameter des Funktionsaufrufs deren Codierung. Der vierte Parameter von deflateInit2 gibt die Kodierung an. PHP definiert drei Konstanten: 16#define PHP_ZLIB_ENCODING_DEFLATE 0x0f // zlib 15

Drei Funktionen können die Kodierung direkt angeben, um andere Algorithmen während des Aufrufprozesses zu verwenden:

zlib : ZLIB_ENCODING_DEFLATE gzip: ZLIB_ENCODING_GZIPdeflate: ZLIB_ENCODING_RAW

Diese drei Funktionen sind einfache Versionen der drei Algorithmen. Die aufrufende Methode wird mit besserer Benennung angezeigt. Die drei Funktionen können den gleichen Effekt erzielen, indem sie dieselbe Codierung angeben, und PHP stellt außerdem die Funktion zlib_encode als universelle Komprimierungsfunktion bereit.

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