Kompilacja Doctrine w symfony 1.4

Ten wpis został napisany dawno temu i może być już nieaktualny.

Z reguły przy profilowaniu aplikacji symfony 1.x wychodzi, że budowanie obiektów przez Doctrine jest jedną z bardziej pracochłonnych operacji. Ostatnio miałem ciekawszy przypadek. Znaczącą część czasu wykonania skryptu zajmowało ładowanie klas ORMa (require_once!). W normalnych warunkach tego typu operacje są prawie niewidoczne. Z pomocą przyszedł mechanizm kompilacji, który łączy pliki z głównymi klasami Doctrine w jeden. Dzięki temu większość klas potrzebnych Doctrine podczas żądania załączanych jest tylko raz. W pluginie sfTaskExtraPlugin znajdziemy task doctrine:compile, który realizuje to zadanie. Notatka:  serwer, na którym zainstalowano wspomnianą aplikację miał więcej problemów (np źle skonfigurowane APC). Uwydatniły one problem wolnego ładowania klas. Nie mniej jednak kompilacja miała swój wkład w poprawę wydajności.

Instalacja sfTaskExtraPlugin

./symfony plugin:install sfTaskExtraPlugin

Kompilacja Doctrine

Doctrine skompilujemy tylko ze wsparciem dla mysql, a wynik zapiszemy do pliku lib/doctrine.compiled.php:

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

Tak jak zasugeruje nam komunikat po kompilacji, załączamy skompilowany plik w ProjectConfiguration:

public function setup()
{
  // ...

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

Warunkiem poprawnego działania aplikacji po kompilacji jest używanie klasy Doctrine_Core, a nie Doctrine. Task działa z najnowszymi wersjami symfony 1.3 i 1.4.

Jakub Zalas

Jakub Zalas

Architekt, Programista, Trener