Новое в Symfony 4.4: Улучшенный контроль над Progress Bars в консоли

Индикатор выполнения (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).