Медленная отдача через фильтры (zlib.deflate и др.)
От: shestero  
Дата: 28.09.16 18:31
Оценка:
На сервере пакую данные для вставки в клиенте в ZIP-файл без перепаковки.
Использую также прозрачный фильтр от horde ( см. https://apt-browse.org/browse/ubuntu/trusty/universe/all/php-horde-stream-filter/2.0.2-1/file/usr/share/php/Horde/Stream/Filter/Crc32.php ) для подсчёта контрольной суммы и аналогичные тривиальные фильтры для подсчёта размера до и после паковки ( lenfilter.php ):
require_once "horde-crc32.php";
require_once "lenfilter.php";

@ini_set('output_buffering', 0);

stream_filter_register("len_filter",  "Length_Stream_Filter");
stream_filter_register("horde_crc32", "Horde_Stream_Filter_Crc32");

$params_crc  = new stdClass;
$params_len_before = new stdClass;
$params_len_after  = new stdClass;
$f = fopen('php://output', 'w');
stream_filter_append($f, "horde_crc32", STREAM_FILTER_WRITE, $params_crc);
stream_filter_append($f, "len_filter",  STREAM_FILTER_WRITE, $params_len_before);
stream_filter_append($f, "zlib.deflate",STREAM_FILTER_WRITE);
stream_filter_append($f, "len_filter",  STREAM_FILTER_WRITE, $params_len_after);

… вывод данных в $f …

fflush($f);
fclose($f);

$format = "N"; // unsigned long (always 32 bit, big endian byte order)
echo pack($format, $params_len_after->length );
echo pack($format, $params_len_before->length );
echo pack($format, $params_crc->crc32 );
Проблема: работает очень медленно, ест CPU (сервер быстрый).
Может это из-за того, что использую много фильтров?
Есть ли возможность получить размеры до и/или после сжатия иным способом (например из стандартного фильтра zlib.deflate ?
Кто что посоветует ?
filters zlib.deflate crc32
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.