Nastavení RobotLoaderu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pmg
Člen | 372
+
0
-
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();

Nevýhoda je ta, že s kompaktní verzí se indexují všechny třídy zbytečně. V nekompaktní verzi se také indexují zbytečně, protože je aktivní NetteLoader. Další knihovny mají většinou vlastní loader a indexují se zbytečně. Existuje možnost zvaná netterobots.txt, ale třeba u kompaktních verzí se většina souborů indexuje zbytečně. Většina presenterů se také indexuje zbytečně.

Nejde o čas strávený indexací, ale o velikost kešovaného souboru. Zkouším proto přidat nastavení

$loader->acceptFiles = '*.inc.php';

Abstraktní presentery, komponenty a základní třídy knihoven se přejmenují a indexuje se tak jen to potřebné.

Kompaktní verze je asi nejlepší registrovat explicitně v boostrapu.

$loader->addClass('Texy', LIBS_DIR . '/Texy.minified.php');

Ono to neindexování také pomáhá odhalit chyby se špatným pojmenováním souboru s presenterem. Vlákno je záměrně na fóru Obecná diskuse.

kravčo
Člen | 721
+
0
-

Pokiaľ viem, klasické indexovanie minimalizovanej verzie by okamžite vyčerpalo pamäť a skončilo chybou – viď diskusiu.

Preto sú minimalizované verzie opatrené zoznamom tried, ktoré sa v nich nachádzajú a indexácia je okamžitá…

Dávnejšie som tiež skúšal konštrukciu:

<?php

require LIBS_DIR . '/Nette/loader.php';

$loader = new RobotLoader;
$loader->addDirectory(APP_DIR);
$loader->register();

// ...

V tomto prípade sa RobotLoaderom indexuje len APP_DIR a Nette samotné sa načítava NetteLoaderom (spl_autoload_register() stack). No ak používam viacero knižníc, je to dosť otravné dopisovať tam includy a radšej obetujem NetteLoader za pohodlie RobotLoadera…

pmg
Člen | 372
+
0
-

Díky za vyjádření a za odkaz. Seznamu tříd v kompaktní verzi jsem si všiml, ale nepodařilo se najít, že by se někde parsoval. (Hledal jsem v distribuci slovo „netteloader“.)

Nicméně jak jsem psal: nejde o čas strávený indexací, ale o velikost kešovaného souboru. Samo Nette soubor moc nezvětší, ale jiné knihovny třeba ano. A v obou případech je to navíc zbytečné.

Mám chuť udělat to jako ty, ale netěší mě, že kešovaný soubor s třídami je s mírnou nadsázkou velký jako celý framework.

pmg
Člen | 372
+
0
-
if (preg_match('#//nette'.'loader=(\S*)#', $s, $matches)) {
	foreach (explode(',', $matches[1]) as $name) {
		$this->addClass($name, $file);
	}
	return;
}

Tak to ale byla podpásovka! Neprojevil jsem víc inteligence než tento parser.

David Grudl
Nette Core | 7790
+
0
-

V kompaktní verzi by klidně mohlo byt prázdné //netteloader=, když už je aktivní RobotLoader, tak jsou všechny třídy načtené.

V nekompaktní verzi se při zaindexování Nette RobotLoaderem odstaví NetteLoader, kvůli výkonu.

pmg
Člen | 372
+
0
-

V kompaktní verzi by klidně mohlo byt prázdné //netteloader=, když už je aktivní RobotLoader, tak jsou všechny třídy načtené.

To by bylo pěkné.