minor #10241 [DependencyInjection] made some perf improvements (fabpot)
This PR was merged into the 2.6-dev branch.
Discussion
----------
[DependencyInjection] made some perf improvements
| Q | A
| ------------- | ---
| Bug fix? | no
| New feature? | no
| BC breaks? | yes
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
This PR optimizes the creation of dumped containers drastically (thanks @jpauli for the hint).
The Container class generated by the PHP dumper does not include the `getDefaultParameters()` method anymore. It does not seem like a big deal to me as I fail to see a use case where someone would override this method.
Commits
-------
e1a3ef8
[DependencyInjection] made some perf improvements
This commit is contained in:
commit
181e460984
@ -800,16 +800,18 @@ EOF;
|
|||||||
*/
|
*/
|
||||||
private function addConstructor()
|
private function addConstructor()
|
||||||
{
|
{
|
||||||
$arguments = $this->container->getParameterBag()->all() ? 'new ParameterBag($this->getDefaultParameters())' : null;
|
$parameters = $this->exportParameters($this->container->getParameterBag()->all());
|
||||||
|
|
||||||
$code = <<<EOF
|
$code = <<<EOF
|
||||||
|
|
||||||
|
private static \$parameters = $parameters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct($arguments);
|
parent::__construct(new ParameterBag(self::\$parameters));
|
||||||
|
|
||||||
EOF;
|
EOF;
|
||||||
|
|
||||||
@ -837,23 +839,17 @@ EOF;
|
|||||||
*/
|
*/
|
||||||
private function addFrozenConstructor()
|
private function addFrozenConstructor()
|
||||||
{
|
{
|
||||||
|
$parameters = $this->exportParameters($this->container->getParameterBag()->all());
|
||||||
|
|
||||||
$code = <<<EOF
|
$code = <<<EOF
|
||||||
|
|
||||||
private \$parameters;
|
private static \$parameters = $parameters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
EOF;
|
|
||||||
|
|
||||||
if ($this->container->getParameterBag()->all()) {
|
|
||||||
$code .= "\n \$this->parameters = \$this->getDefaultParameters();\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$code .= <<<EOF
|
|
||||||
|
|
||||||
\$this->services =
|
\$this->services =
|
||||||
\$this->scopedServices =
|
\$this->scopedServices =
|
||||||
\$this->scopeStacks = array();
|
\$this->scopeStacks = array();
|
||||||
@ -961,8 +957,6 @@ EOF;
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$parameters = $this->exportParameters($this->container->getParameterBag()->all());
|
|
||||||
|
|
||||||
$code = '';
|
$code = '';
|
||||||
if ($this->container->isFrozen()) {
|
if ($this->container->isFrozen()) {
|
||||||
$code .= <<<EOF
|
$code .= <<<EOF
|
||||||
@ -974,11 +968,11 @@ EOF;
|
|||||||
{
|
{
|
||||||
\$name = strtolower(\$name);
|
\$name = strtolower(\$name);
|
||||||
|
|
||||||
if (!(isset(\$this->parameters[\$name]) || array_key_exists(\$name, \$this->parameters))) {
|
if (!(isset(self::\$parameters[\$name]) || array_key_exists(\$name, self::\$parameters))) {
|
||||||
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', \$name));
|
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', \$name));
|
||||||
}
|
}
|
||||||
|
|
||||||
return \$this->parameters[\$name];
|
return self::\$parameters[\$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -988,7 +982,7 @@ EOF;
|
|||||||
{
|
{
|
||||||
\$name = strtolower(\$name);
|
\$name = strtolower(\$name);
|
||||||
|
|
||||||
return isset(\$this->parameters[\$name]) || array_key_exists(\$name, \$this->parameters);
|
return isset(self::\$parameters[\$name]) || array_key_exists(\$name, self::\$parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1005,28 +999,15 @@ EOF;
|
|||||||
public function getParameterBag()
|
public function getParameterBag()
|
||||||
{
|
{
|
||||||
if (null === \$this->parameterBag) {
|
if (null === \$this->parameterBag) {
|
||||||
\$this->parameterBag = new FrozenParameterBag(\$this->parameters);
|
\$this->parameterBag = new FrozenParameterBag(self::\$parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
return \$this->parameterBag;
|
return \$this->parameterBag;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOF;
|
EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
$code .= <<<EOF
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the default parameters.
|
|
||||||
*
|
|
||||||
* @return array An array of the default parameters
|
|
||||||
*/
|
|
||||||
protected function getDefaultParameters()
|
|
||||||
{
|
|
||||||
return $parameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
EOF;
|
|
||||||
|
|
||||||
return $code;
|
return $code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,11 +17,15 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
|||||||
*/
|
*/
|
||||||
class Container extends AbstractContainer
|
class Container extends AbstractContainer
|
||||||
{
|
{
|
||||||
|
private static $parameters = array(
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct(new ParameterBag(self::$parameters));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,11 +16,15 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
|||||||
*/
|
*/
|
||||||
class ProjectServiceContainer extends Container
|
class ProjectServiceContainer extends Container
|
||||||
{
|
{
|
||||||
|
private static $parameters = array(
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct(new ParameterBag(self::$parameters));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,15 +16,16 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
|
|||||||
*/
|
*/
|
||||||
class ProjectServiceContainer extends Container
|
class ProjectServiceContainer extends Container
|
||||||
{
|
{
|
||||||
private $parameters;
|
private static $parameters = array(
|
||||||
|
'empty_value' => '',
|
||||||
|
'some_string' => '-',
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->parameters = $this->getDefaultParameters();
|
|
||||||
|
|
||||||
$this->services =
|
$this->services =
|
||||||
$this->scopedServices =
|
$this->scopedServices =
|
||||||
$this->scopeStacks = array();
|
$this->scopeStacks = array();
|
||||||
@ -68,11 +69,11 @@ class ProjectServiceContainer extends Container
|
|||||||
{
|
{
|
||||||
$name = strtolower($name);
|
$name = strtolower($name);
|
||||||
|
|
||||||
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters))) {
|
if (!(isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters))) {
|
||||||
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
|
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->parameters[$name];
|
return self::$parameters[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,7 +83,7 @@ class ProjectServiceContainer extends Container
|
|||||||
{
|
{
|
||||||
$name = strtolower($name);
|
$name = strtolower($name);
|
||||||
|
|
||||||
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters);
|
return isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,21 +100,9 @@ class ProjectServiceContainer extends Container
|
|||||||
public function getParameterBag()
|
public function getParameterBag()
|
||||||
{
|
{
|
||||||
if (null === $this->parameterBag) {
|
if (null === $this->parameterBag) {
|
||||||
$this->parameterBag = new FrozenParameterBag($this->parameters);
|
$this->parameterBag = new FrozenParameterBag(self::$parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->parameterBag;
|
return $this->parameterBag;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Gets the default parameters.
|
|
||||||
*
|
|
||||||
* @return array An array of the default parameters
|
|
||||||
*/
|
|
||||||
protected function getDefaultParameters()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
'empty_value' => '',
|
|
||||||
'some_string' => '-',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,9 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
|
|||||||
*/
|
*/
|
||||||
class ProjectServiceContainer extends Container
|
class ProjectServiceContainer extends Container
|
||||||
{
|
{
|
||||||
private $parameters;
|
private static $parameters = array(
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
|
@ -16,22 +16,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
|||||||
*/
|
*/
|
||||||
class ProjectServiceContainer extends Container
|
class ProjectServiceContainer extends Container
|
||||||
{
|
{
|
||||||
/**
|
private static $parameters = array(
|
||||||
* Constructor.
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(new ParameterBag($this->getDefaultParameters()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the default parameters.
|
|
||||||
*
|
|
||||||
* @return array An array of the default parameters
|
|
||||||
*/
|
|
||||||
protected function getDefaultParameters()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
'foo' => '%baz%',
|
'foo' => '%baz%',
|
||||||
'baz' => 'bar',
|
'baz' => 'bar',
|
||||||
'bar' => 'foo is %%foo bar',
|
'bar' => 'foo is %%foo bar',
|
||||||
@ -47,5 +32,12 @@ class ProjectServiceContainer extends Container
|
|||||||
7 => 'null',
|
7 => 'null',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct(new ParameterBag(self::$parameters));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,18 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
|||||||
*/
|
*/
|
||||||
class ProjectServiceContainer extends Container
|
class ProjectServiceContainer extends Container
|
||||||
{
|
{
|
||||||
|
private static $parameters = array(
|
||||||
|
'baz_class' => 'BazClass',
|
||||||
|
'foo_class' => 'Bar\\FooClass',
|
||||||
|
'foo' => 'bar',
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct(new ParameterBag($this->getDefaultParameters()));
|
parent::__construct(new ParameterBag(self::$parameters));
|
||||||
$this->methodMap = array(
|
$this->methodMap = array(
|
||||||
'bar' => 'getBarService',
|
'bar' => 'getBarService',
|
||||||
'baz' => 'getBazService',
|
'baz' => 'getBazService',
|
||||||
@ -370,18 +376,4 @@ class ProjectServiceContainer extends Container
|
|||||||
|
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the default parameters.
|
|
||||||
*
|
|
||||||
* @return array An array of the default parameters
|
|
||||||
*/
|
|
||||||
protected function getDefaultParameters()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
'baz_class' => 'BazClass',
|
|
||||||
'foo_class' => 'Bar\\FooClass',
|
|
||||||
'foo' => 'bar',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -16,15 +16,17 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
|
|||||||
*/
|
*/
|
||||||
class ProjectServiceContainer extends Container
|
class ProjectServiceContainer extends Container
|
||||||
{
|
{
|
||||||
private $parameters;
|
private static $parameters = array(
|
||||||
|
'baz_class' => 'BazClass',
|
||||||
|
'foo_class' => 'Bar\\FooClass',
|
||||||
|
'foo' => 'bar',
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->parameters = $this->getDefaultParameters();
|
|
||||||
|
|
||||||
$this->services =
|
$this->services =
|
||||||
$this->scopedServices =
|
$this->scopedServices =
|
||||||
$this->scopeStacks = array();
|
$this->scopeStacks = array();
|
||||||
@ -320,11 +322,11 @@ class ProjectServiceContainer extends Container
|
|||||||
{
|
{
|
||||||
$name = strtolower($name);
|
$name = strtolower($name);
|
||||||
|
|
||||||
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters))) {
|
if (!(isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters))) {
|
||||||
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
|
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->parameters[$name];
|
return self::$parameters[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -334,7 +336,7 @@ class ProjectServiceContainer extends Container
|
|||||||
{
|
{
|
||||||
$name = strtolower($name);
|
$name = strtolower($name);
|
||||||
|
|
||||||
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters);
|
return isset(self::$parameters[$name]) || array_key_exists($name, self::$parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -351,22 +353,9 @@ class ProjectServiceContainer extends Container
|
|||||||
public function getParameterBag()
|
public function getParameterBag()
|
||||||
{
|
{
|
||||||
if (null === $this->parameterBag) {
|
if (null === $this->parameterBag) {
|
||||||
$this->parameterBag = new FrozenParameterBag($this->parameters);
|
$this->parameterBag = new FrozenParameterBag(self::$parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->parameterBag;
|
return $this->parameterBag;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Gets the default parameters.
|
|
||||||
*
|
|
||||||
* @return array An array of the default parameters
|
|
||||||
*/
|
|
||||||
protected function getDefaultParameters()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
'baz_class' => 'BazClass',
|
|
||||||
'foo_class' => 'Bar\\FooClass',
|
|
||||||
'foo' => 'bar',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user