RobotLoader a adresář libs – zmenšení cache robotloader

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

Teď jsem zjistil takovou drobnost, ale třeba se vám to bude hodit.
Pokud používáte robotloader, pravděpodobně máte v bootstrapu něco jako

<?php
$loader = new /*Nette\Loaders\*/RobotLoader();
$loader->addDirectory(LIBS_DIR);
?>

a v adresáři libs naházené různé knihovny, typicky nette, dibi. Já
tam mám navíc ještě mybase (moje vlastní knihovna), dblib (pracovní),
občas i zend.

Robot loader si všechny třídy zaindexuje a uloží si je do cache.
Ale knihovna nette je vlastně indexovaná zbytečně, ona robotloader nepotřebuje!
Čili jsem v bootstrapu vypsal přímo knihovny:

<?php
$loader = new /*Nette\Loaders\*/RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR . "/db-library/");
$loader->addDirectory(LIBS_DIR . "/dibi/");
$loader->addDirectory(LIBS_DIR . "/myextras/");
$loader->addDirectory(LIBS_DIR . "/mybase/");
$loader->autoRebuild=TRUE;
?>

Tímto se soubor robotloaderu v cache zmenšil o ca 14 kb.
Tuším, že i zpracování se mohlo o nějakou tu setinku sekundy zkrátit.
No, jak jsem psal, je to drobnost :)

Dobrou noc

Hurá, objevil jsem kolo .No, jak psal David, opakování je matka moudrousti.

Editoval jasir (3. 5. 2009 2:14)

stpnkcrk
Generous Backer | 189
+
0
-

Když už jsi to nakousl, není lepší místo vyjmenovávání mraků knihovem umístit do LIBS_DIR soubor netterobots.txt a tím říct, které složky prohledávat nechceš?

Syntax by byl

Disallow: /Nette

Samozřejmě takhle lze zakázat více složek, jen přidáš další řádek. ;)

DocX
Člen | 154
+
0
-

Dibi se o načítání potřebných souborů také postará samo ;)

A pak si myslím, že nejde jen o zmenšení cache, ale i o zbavení se zbytečné duplicity loader hooků na ty samé třídy (NetteLoader se načítá vždy s Nette + ještě RobotLoader)

kravčo
Člen | 721
+
0
-

Pokiaľ má RobotLoader medzi adresármi i ten s Nette, prekryje NetteLoader, čiže ona duplicita nenastáva.

DocX
Člen | 154
+
0
-

kravčo napsal(a):

Pokiaľ má RobotLoader medzi adresármi i ten s Nette, prekryje NetteLoader, čiže ona duplicita nenastáva.

Jo to funguje. Prostě se PHP nejdřív zeptá na RobotLoader a když ten nic nenajde tak jde dál. Ale myslel jsem to jako, že jsou pak v jednu chvíli načtené v paměti oba Loadery a obsah RobotLoaderu je do jisté míry duplicitní (pokud prochází i Nette)

kravčo
Člen | 721
+
0
-

DocX napsal(a):

Jo to funguje. Prostě se PHP nejdřív zeptá na RobotLoader a když ten nic nenajde tak jde dál. Ale myslel jsem to jako, že jsou pak v jednu chvíli načtené v paměti oba Loadery a obsah RobotLoaderu je do jisté míry duplicitní (pokud prochází i Nette)

Nie sú. Robotloader nahradí NetteLoader v prípade, že prechádza i adresár s Nette.