Я использую PHP 5.6.3.
Один из моих профессиональных проектов включает в себя функцию распаковки:
// 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();
… который обрабатывается на большом файле ZIP (~ 300Mo).
Я сделал много тестов времени простоя и обнаружил, что функция extractTo () составляет более 90% / 95% (20 секунд) от общего времени обработки! Хуже всего то, что размер ZIP увеличится в ближайшие недели (возможно, до 500 мес).
Есть ли способ оптимизировать эту часть моего сценария?
Знаю это я должен извлечь все файлы из ZIP.
Благодарю.
Есть ли способ оптимизировать эту часть моего сценария?
Нет — это одна строка кода, вызываемая один раз. Должно быть очевидно, что нет способа оптимизировать его.
Я подозреваю, что вы действительно хотите знать, можете ли вы получить файл в разархивированном виде, а это совсем другой вопрос.
функция extractTo () составляет более 90% / 95% (20 с.) от общего времени обработки
Прошедшего времени? Процессорное время? Время выполнения PHP?
Может быть возможность получить результаты быстрее, но вы не задаете правильные вопросы. Вы не получите здесь решения — у нас нет доступа к вашей системе, чтобы исправить это за вас.
Поскольку вы ничего не сказали нам об операционной системе и оборудовании, на котором она установлена, мы еще более ограничены в советах, которые можем дать. Переход к более быстрому ЦП может помочь, но, основываясь на предоставленной вами информации, мы не знаем, является ли это узким местом ЦП или В / В хранилища. То, как вы заставите всю систему работать быстрее, заполнило бы большую книгу (я знаю, я ее написал).
Выполнение извлечения вне PHP может помочь.
Использование другого алгоритма сжатия может помочь.
Создание нескольких файлов и разархивирование их параллельно, вероятно, поможет.
….но вы также ничего не сказали нам об ограничениях здесь.
Других решений пока нет …