Индикатор выполнения (Progress Bar) является одним из самых популярных функций компонента Console. Он позволяет отображать информацию о ходе выполнения команды, что идеально подходит для длительных команд.
Самое сложное при создании некоторых прогресс баров — как определить частоту их перерисовки с помощью метода setRedrawFrequency()
. Если вы перерисовываете его слишком часто, индикатор выполнения мигает слишком сильно, но если вы перерисовываете его слишком редко, индикатор выполнения выглядит не отвечающим.
Дополнительная проблема заключается в том, что иногда вы не знаете, насколько быстро или медленно будет выполняться команда (например, при загрузке какого-либо файла, копировании файлов и т. д.).
В Symfony 4.4 улучшили прогресс бар для Symfony Console с помощью двух новых методов, которые помогут вам контролировать частоту перерисовки:
use Symfony\Component\Console\Helper\ProgressBar;
$progressBar = new ProgressBar($output, 50000);
$progressBar->start();
$progressBar->setRedrawFrequency(100);
$progressBar->minSecondsBetweenRedraws(0.1);
$progressBar->maxSecondsBetweenRedraws(0.5);
Новые методы minSecondsBetweenRedraws()
и maxSecondsBetweenRedraws()
дают больший контроль над частотой перерисовки индикатора выполнения и гарантируют, что вы не перерисовываете ее слишком часто или слишком редко.
В связи с этим в Symfony 4.4 также установили 0.1
в качестве значения свойства minSecondsBetweenRedraws
, поэтому индикаторы выполнения по умолчанию обновляются не более 10
раз в секунду (см. запрос на извлечение № 32424).