Zrychlení generování odkazů
- dada-amater
- Bronze Partner | 52
Hledal jsem jak zrychlit generování odkazů a protože jsem toho moc nenašel (krom rady cachuj co muzes), vytvoril jsem si novou funkci link().
<?php
private static $linkCache;
public function link($destination,$arg=array()){
if($destination=='this' || substr($destination, -1)=="*")
return parent::link($destination,$arg);
$search=$arg;
$i=0;
$cache_key=$destination;
foreach ($search as $key => $value) {
$i++;
$search[$key]='0000'.$i; //nektere presentery chteji jako parametr numeric string, proto se neda pouzit hezci __$key__
$cache_key.="-".$key;
}
if(!isset(self::$linkCache[$cache_key])){
$data=parent::link($destination,$search);
self::$linkCache[$cache_key]=parent::link($destination,$search);
}
return str_replace($search,$arg,self::$linkCache[$cache_key]);
}
?>
Je to primitivni „cachovani“, pokud mate na strance vice odkazu jednoho typu (tabulky, vypisy), dost to pomuze. Meril jsem rychlost (3 routy, 1 z toho jednosmerna):
- normalni generovany odkaz typu Homepage:default bez cache: 0.0004s
- normalni odkaz pri zapnute cache (cache miss): 0.0006
- dalsi dotaz se stejnymi parametry (rozumej stejne promenne, ne hodnoty): 0.0001s
Pokud tedy nekde vyuzivate odkazy stejneho typu, tak to dokaze dost pomoci. Pouzivam to v basepresenteru a basecontrolu, takze mi pres to jedou veskere dotazy. Kazdy at si zmeri, jak mu to pomuze, u me je to zrychleni znat dost.
Zkousel jsem to cele ukladat do pernamentni cache (file,memcache), takze pak nedojde ani na prvni generovani pri requestu a jede to rovnou z cache. Jeste to trochu zrychli, ale musi se tam pak resit na kterem jste modulu/presenteru/komponenteu jste a nakonec ta rezie tu vyhodu castecne smaze.
Dotaz do publika:
Proc latte makro {ifCurrent} vola metodu link()? Cili {ifCurrent Homepage:*}
vola link(„Homepage:*“), coz je podle me zbytecny. Zdrojaky jsem jeste
neprochazel.
Editoval dada-amater (14. 3. 2013 13:16)