Page tree
Skip to end of metadata
Go to start of metadata

Optimalizace jádra

V rámci vývoje Vivo 2.1 došlo k několika výrazným optimalizacím proti původnímu stavu. 

Na základě profilingu jádra se ukázaly jeho největší slabiny z pohledu výkonu a to:

  • parsování YAML souborů (pomocí Symphony parseru)
  • neefektivní a často zbytečné využívání reflection
  • proxy class
  • redundantní přístupy ke stejným prostředkům

Z pohledu pohodlnosti používání kódu byla část jádra správně okomentována pro lepší strojovou čitelnost kódu. 

YAML soubory

Vivo načítá mnoho .yml souborů s konfigurací, parsování těchto souborů trvalo řádově stovky milisekund samo o sobě. Nově se zpracovaná konfigurace uloží do cache, jakákoli změna konfiguračního souboru cache zregeneruje.

Reflection

Na rozdíl od přímého přístupu k proměnným nebo volání nativních funkcí nebo metod objektů zvyšuje reflection výrazně režii v Zend enginu PHP. V rámci optimalizací byly provedeny tyto úpravy:

  • instance reflection (metod a tříd) se cachují do paměti
  • magické gettery/settery využívající reflection na mnoha místech byly nahrazeny přímým voláním getteru/setteru (vedlejším efektem je lepší strojová čitelnost kódu pro IDE a odstranění/zredukování problému s přetečením hloubky zanoření xdebug)

Proxy class

Proxy class jako další zástupce reflection je jedním ze základních stavebních kamenů Vivo, proto není možné celkovou režii efektivně odstranit, nicméně byla značně zredukována následujícími optimalizacemi:

  • efektivní cache pro reflection (viz výše)
  • aktualizace proxy kódu se nyní provádí pouze v případě, že se změnila zdrojová třída

Redundantní přístupy k prostředkům

Na základě analýzy požadavků na SOLR a repository vyšlo najevo, že se na některé požadavky neustále opakují v rámci jedné stránky nebo množiny stránek (v modelovém případu Cetelem.sk až 16x stejný dotaz v rámci jedné stránky). Vivo nyní obsahuje následující optimalizace:

  • triviální dotazy na SOLR (získání entity) a repozitář jsou cachovány (perzistentně)
  • požadavky na překlad uuid na cestu jsou cachovány do paměti

 

  • No labels