Rychlost generovani odkazu

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

Nazdarek nette isti,
mel bych mensi dotaz jak resit generovani velkeho mnozstvi odkazu na jedne strance, rekneme tak zhruba 500 a vice, dosel sem ke zjisteni ze i pri zakladnich dvouch routach se takovej pocet linku generuje u me na kompu intel c2d t7250 tak asi 200+ ms coz me desi.

Editoval despiq (1. 4. 2010 3:59)

Mikulas Dite
Člen | 756
+
0
-

Tak můžeš cachovat, ale i využívat různé předpřipravené linky (tušim makro capture by mohlo pomoct, ale nejsem si jistej jak to dělá). Potom by to mělo frčet dostatečně rychle.

despiq
Člen | 320
+
0
-

cachovat?
jak nacachuju

<?php
 {link test id => 1}
 {link test id => 2}
 {link test id => 3}
?>

?

a zachytit si link pomoci capture by taky nijak nepomohlo, zapomnel sem pripsat ze pokazde jsou v linku jine udaje ale to je asi zrejme ze nechci generovat 500krat jeden a ten samy link

Mikulas Dite
Člen | 756
+
0
-

Tak ono si moc nedovedu představit, proč by to mělo být tolik linků. Ale každopádně, pokuď je nějaká část stále stejná, tak to obal makrem cache. Nic složitějšího není potřeba. Pokuď je to při každém requestu jinak, změnil bych návrh, protože jsou to navíc všechno linky uvnitř aplikace. Jestli to má zůstat takhle, tak to budeš asi muset nechat – ms 200 ještě není tak moc hrozný čas.

despiq
Člen | 320
+
0
-

nejake polozky, 10 na stranku, kazda ma 50 atributu na prirazeni u kterych je zvlast odkaz na akci,
a hned si tam za 500, druhym resenim jsou checkboxy a tlacitko na odeslani, to se mi ale tolik nelibi i kdyz by to setrilo i sql server

200ms na vygenerovani 500 odkazu je strasny, urcite musi byt nejaka cesta jak to urychlit

hrach
Člen | 1838
+
0
-

200 ms na localu je naprosto v poradku. muzes tedy renderovane odkazy cachovat?

despiq
Člen | 320
+
0
-

cachovat je nemuzu, 200ms je v poradku na renderovani cely stranky a ne 500ti odkazu, totiz 200ms je renderovani pouze tech odkazu, cela stranka se pak s odkazy renderuje rekneme 700ms a bez 500ms

despiq
Člen | 320
+
0
-

nikdo nema nejakou vychytavku?

hrach
Člen | 1838
+
0
-

tak treba si muzes nechat „vygenrovat“ jen jenen odkaz ze specialnimi parametry, a ty pak budes replacovat. replace bude urcite rychlejsi

<?php
$link = $this->link('Page:view', '__id__', '__var__');

foreach ($data as $val)
	echo str_replace(array('__id__', '__var__'), $val, $link));
?>

Editoval hrach (3. 4. 2010 10:25)

despiq
Člen | 320
+
0
-

replacovani mi prijde jako prasarna, to sem zavrhnul hned na zacatku

hrach
Člen | 1838
+
0
-

otakza je, jestli neni prasarna generovani tolika odkazu, ktery nelze cachovat :P

Jan Tvrdík
Nette guru | 2595
+
0
-

A co trvá na generování těch odkazů tak dlouho?

despiq
Člen | 320
+
0
-

no tak to teda nevim, nejak to asi neumim zjistit

Ondřej Mirtes
Člen | 1536
+
0
-

Jedině zkus zmenšit počet těch rout. Podle mě není 200 ms na tak obrovskou stránku nikterak vysoké číslo.

despiq
Člen | 320
+
0
-

routy jsou

<?php
$router[] = new Route('index.php', array(
	'module' => 'Backend',
	'presenter' => 'Dashboard',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>/<id>', array(
	'module' => 'Backend',
	'presenter' => 'Dashboard',
	'action' => 'default',
	'id' => NULL,
));
?>

min uz jich snad bejt nemuze

200 je to na ostrym serveru s minified nette, na localu je to ve skutecnosti 300 a vic a jedna se o cas ktery zabere generovani pouze tech odkazu a ne cele stranky

i kdyz sem to replacovani zavrhl tak jako helper to neni az zas tak strasny a vysledek je podle ocekavani zadouci ale furt mi vrta hlavou, proc to trva normalne tak dlouho

Honza Marek
Člen | 1664
+
0
-

Neporovnával někdo trochu jak si na tom stojí výkonnost nettí třídy Route a nějakou vlastní jednorázovou záležitostí?

despiq
Člen | 320
+
0
-

tak sem si to dal do skeletonu, 600 odkazu s prirazenim dvou promenych je zhruba 270ms na c2d t7250
bez prirazeni promennych je to asi o 40ms mene
cisty skeleton je zhruba 70ms

1200 odkazu je asi 460ms

asi se musim smirit s tim ze cely proces vygenerovani odkazu proste trva, mozna je pro me otazkou jestli nelze pri generovani odkazu na stejnou akci po sobe to generovani nejak v nette urychlit

redhead
Člen | 1313
+
0
-

Podle mně za všechno může metoda createRequest, která se volá v metodě link. Je dlouhá jak toaletní papír a volat jí 200× za sebou nemůže mít nejlepší výsledek. Já už jsem se na to jednou díval a zdá se mi, že by se to chování mohlo nějak upravit, nevím jesli je nejvýhodnější a nezbytné vytvářet PresenterRequest při tvoření url, ale třeba to má svůj důvod, bůh (DG) ví..

Honza Kuchař
Člen | 1662
+
0
-

A co si přímo v mětodě link cachovat ten výsledek z rout a pak přímo v metodě link provádět replace?

jansfabik
Člen | 193
+
0
-

Nešlo by udělat nějaké vylepšení Route? V metodě constructUrl by se třeba sestavila optimalizovaná anonymní funkce a ta by se cachovala pro každou akci.

David Grudl
Nette Core | 8218
+
0
-

Řady generovaných odkazů například v menu lze nejlépe kešovat přímo v šabloně obalením do {cache}...{/cache}. Lze použít i uvedený příklad s replace, tj. vygenerovat jeden odkaz a dále už psát {$link|replace:'#',$id}

Samotné volání metody presenteru link() v sobě žádné kešování neobsahuje – tedy zatím. Celá věc je totiž poměrně dost komplikovaná a optimalizací rychlosti se budu zabývat spíš až v nějaké další verzi.