Rychlost generovani odkazu
- despiq
- Člen | 320
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
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
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
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
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
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)
- Ondřej Mirtes
- Člen | 1536
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
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
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
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
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
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?
- David Grudl
- Nette Core | 8218
Ř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.