Skip to content

Commit

Permalink
minor #18966 [console] Improve table rendering performance (aik099)
Browse files Browse the repository at this point in the history
This PR was submitted for the master branch but it was merged into the 2.7 branch instead (closes #18966).

Discussion
----------

[console] Improve table rendering performance

| Q             | A
| ------------- | ---
| Branch?       | 2.8
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #18957
| License       | MIT
| Doc PR        | -

With these improvements on my application, that is rendering table with 128 rows and 5 columns I've cut off total application runtime from **0.39s** to **0.26s**.

Commits
-------

73b812e Make one call to "OutputInterface::write" method per table row
  • Loading branch information
fabpot committed Jun 6, 2016
2 parents 2e93849 + 73b812e commit 83e24ba
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions src/Symfony/Component/Console/Helper/Table.php
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ private function renderRowSeparator()
*/
private function renderColumnSeparator()
{
$this->output->write(sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar()));
return sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar());
}

/**
Expand All @@ -274,12 +274,12 @@ private function renderRow(array $row, $cellFormat)
return;
}

$this->renderColumnSeparator();
$rowContent = $this->renderColumnSeparator();
foreach ($this->getRowColumns($row) as $column) {
$this->renderCell($row, $column, $cellFormat);
$this->renderColumnSeparator();
$rowContent .= $this->renderCell($row, $column, $cellFormat);
$rowContent .= $this->renderColumnSeparator();
}
$this->output->writeln('');
$this->output->writeln($rowContent);
}

/**
Expand All @@ -306,12 +306,13 @@ private function renderCell(array $row, $column, $cellFormat)
}

if ($cell instanceof TableSeparator) {
$this->output->write(sprintf($this->style->getBorderFormat(), str_repeat($this->style->getHorizontalBorderChar(), $width)));
} else {
$width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
$content = sprintf($this->style->getCellRowContentFormat(), $cell);
$this->output->write(sprintf($cellFormat, str_pad($content, $width, $this->style->getPaddingChar(), $this->style->getPadType())));
return sprintf($this->style->getBorderFormat(), str_repeat($this->style->getHorizontalBorderChar(), $width));
}

$width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
$content = sprintf($this->style->getCellRowContentFormat(), $cell);

return sprintf($cellFormat, str_pad($content, $width, $this->style->getPaddingChar(), $this->style->getPadType()));
}

/**
Expand Down

0 comments on commit 83e24ba

Please sign in to comment.