Kdyby/Doctrine – Téměř dvojnásobné zpomalení sandboxu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jecma
Člen | 9
+
+1
-

Ahoj,

TL;DR
nasazení Doctriny o 100% zpomalí web podrobnosti níže:

chtěl bych se zeptat, jestli jste si někdo nevšiml výrazného zpomalení webu po nasazení Kdyby/Doctrine. Snažil jsem se optimalizovat jeden web pro rychlost a přišel na to, že Doctrina mi poměrně výrazně zpomaluje web už při načtení a jednom jednoduchém dotazu (pak se web zpomaluje pouze dalšími dotazy).

Poměrně stejný rozdíl v rychlosti načtení stránky se mi projevuje jak na localhostu s php 5.6, tak na webhostingu s php 7.0.10.

Stáhnu čistý web-project + kdyby/doctrine:

composer create-project nette/web-project test
composer require kdyby/doctrine

Všechno ponastavuji podle dokumentace:

extensions:
    # add theese four lines
    console: Kdyby\Console\DI\ConsoleExtension
    events: Kdyby\Events\DI\EventsExtension
    annotations: Kdyby\Annotations\DI\AnnotationsExtension
    doctrine: Kdyby\Doctrine\DI\OrmExtension

doctrine:
    user: root
    password: root
    dbname: test
    metadata:
        App: %appDir%

database:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user: root
	password: root

Tak a teď k rychlostem:

  • test s Nette/Database:
class HomepagePresenter extends Nette\Application\UI\Presenter
{
	/**
	 * @var Nette\Database\Context @inject
	 */
	public  $database;


	public function actionDefault()
	{
		$this->database->query('select * from article');
	}
}

**Proběhne za cca 110 ms (testováno pomocí ApacheBench „ab.exe -n 100 http://test.cz.l/
**

  • test s doctrinou
class HomepagePresenter extends Nette\Application\UI\Presenter
{
	/**
	 * @var EntityManager @inject
	 */
	public $em;



	public function actionDefault()
	{
		$this->em->getRepository(Article::class)->findAll();
	}
}

**Proběhne průměrně za 220ms (100requestů přes ApacheBench)
**
Dvojnásobná doba načtení stránky mi přijde trochu moc.

Tabulka article je prázdná a samotný dotaz zabírá jednotky ms. Development/production mode ukazuje stejný poměr poklesu rychlosti. Entita Article je přebraná z dokumentace a tabulka vytvořená pomocí orm:schem-tool:create. Ještě jsem si všimnul že s doctrinou web načítá 260 souborů s nette/database pouze 136.

Tak a teď kde je problém:

  • někde mám něco špatně nastavené?
  • pomalý HW? (localhost má SSD, na čem frčí webhosting netuším)
  • Doctrina je prostě moloch?

Editoval Jecma (23. 11. 2016 22:22)