Compiling doctrine in symfony 1.4

Warning: This blog post was written a long time ago and might be no longer relevant.
Doctrine logo

When profiling symfony 1.x applications hydrating Doctrine objects occurs to be one of the most time consuming operations. Recently I experienced something different. Loading ORM classes was one of the most expensive tasks. Usually such operations don't even show up during profiling.

Fortunately Doctrine comes with a special task which merges all its classes into one file. This way number of require statements is significantly reduced.

sfTaskExtraPlugin comes with doctrine:compile task for symfony (which is really a wrapper for doctrine script).

Note: mentioned application was deployed to the server suffering from several issues (i.e. invalid APC configuration). Those issues made class loading problem more visible. Nevertheless compilation played a role in improving overall performance.

sfTaskExtraPlugin installation

./symfony plugin:install sfTaskExtraPlugin

Doctrine Compilation

Following command will compile Doctrine classes into _lib/doctrine.compiled.php _file with only mySQL support:

./symfony doctrine:compile --driver=mysql lib/doctrine.compiled.php

Just like the output message will suggest we need to alter ProjectConfiguration class:

public function setup()
{
  // ...

  if ($this instanceof sfApplicationConfiguration && !$this->isDebug())
  {
    require_once sfConfig::get('sf_lib_dir') . '/doctrine.compiled.php';
  }
}

To make it all work we have to use the Doctrine_Core class and not Doctrine. The later will not be compiled.

Task works with the latest versions of symfony 1.3 and 1.4.

Jakub Zalas

Jakub Zalas

Agile Software Engineer, Architect, Trainer