mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-22 19:06:35 +00:00
ZlibCompressor: use libdeflate for level 0 compression
this is supported since libdeflate 1.15 and ext-libdeflate 0.2.0. Everyone should be using these versions by now anyway, and if they aren't, they should update. libdeflate's level 0 compression is over 20 times faster than zlib, so this is a nice performance improvement.
This commit is contained in:
parent
c1ed182112
commit
e3700cab50
@ -144,6 +144,13 @@ namespace pocketmine {
|
|||||||
$messages[] = "chunkutils2 ^$wantedVersionMin is required, while you have $chunkutils2_version.";
|
$messages[] = "chunkutils2 ^$wantedVersionMin is required, while you have $chunkutils2_version.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(($libdeflate_version = phpversion("libdeflate")) !== false){
|
||||||
|
//make sure level 0 compression is available
|
||||||
|
if(version_compare($libdeflate_version, "0.2.0") < 0 || version_compare($libdeflate_version, "0.3.0") >= 0){
|
||||||
|
$messages[] = "php-libdeflate ^0.2.0 is required, while you have $libdeflate_version.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(extension_loaded("pocketmine")){
|
if(extension_loaded("pocketmine")){
|
||||||
$messages[] = "The native PocketMine extension is no longer supported.";
|
$messages[] = "The native PocketMine extension is no longer supported.";
|
||||||
}
|
}
|
||||||
|
@ -67,17 +67,12 @@ final class ZlibCompressor implements Compressor{
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function zlib_encode(string $data, int $level) : string{
|
|
||||||
return Utils::assumeNotFalse(zlib_encode($data, ZLIB_ENCODING_RAW, $level), "ZLIB compression failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
public function compress(string $payload) : string{
|
public function compress(string $payload) : string{
|
||||||
$compressible = $this->minCompressionSize !== null && strlen($payload) >= $this->minCompressionSize;
|
$compressible = $this->minCompressionSize !== null && strlen($payload) >= $this->minCompressionSize;
|
||||||
if(function_exists('libdeflate_deflate_compress')){
|
$level = $compressible ? $this->level : 0;
|
||||||
return $compressible ?
|
|
||||||
libdeflate_deflate_compress($payload, $this->level) :
|
return function_exists('libdeflate_deflate_compress') ?
|
||||||
self::zlib_encode($payload, 0);
|
libdeflate_deflate_compress($payload, $level) :
|
||||||
}
|
Utils::assumeNotFalse(zlib_encode($payload, ZLIB_ENCODING_RAW, $level), "ZLIB compression failed");
|
||||||
return self::zlib_encode($payload, $compressible ? $this->level : 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user