februar 7, 2016

Kreativt brug af blok caching på din inner_product.html

Vi synes jo, det er fedt, når webshops er hurtige. Derfor lavede vi blok caching.

I nogle tilfælde hiver man et produkts kategorier, varianter på lager eller profilattributter ud på et produkt på en landingsside eller kategori som f.eks. her på Faktorfobis side med soldragter. Det gøres for at man kan lave filteret på klientsiden. Her kan du se i kildekoden, hvordan sådan et produkt ser ud fordi jeg hiver brand, størrelser på lager og diverse kategorier ud. Det er tidskrævende.

Kreativ brug af blok caching

Ville jeg lave blok-caching på det her og bare kalde den “productcache” eller noget, så ville det være samme produkt, der blev vist hver gang. Så det duer ikke. Vi skal give den et unikt navn.  Derfor laver jeg blok cachingen med produktets ID.

Det gør du således:

<{assign var="newcachename" value="product_cache_"|cat:$product->getProductId()}>

Nu har vi en unik cache for hvert produkt. Nice og nifty.

Men … hvis man har sat cachen til at leve 24 timer. Så vil der for hver 24. time være én kunde, der oplevede siden som vældigt langsom (fordi vi skulle opbygge cachen for hvert produkt igen). Det er øv. Langsomme sider er øv.

Så derfor sætter jeg en random TTL, så hvert produkts cache bliver bygget tilfældigt (mellem 12 og 24 timer). Så i stedet for at én kunde oplever en langsom side hvert døgn, så tager alle en bid af “kagen”, men det er så tilpas hurtigt, at alle stadig oplever siden som hurtig. Samtidigt er størrelser på lager nogenlunde opdateret (og max 24 timer bagud). Det gøres sådan:

<{assign var="randomttl" value=43200|mt_rand:86400}>

Så vores samlede kode starter sådan her

<{assign var="newcachename" value="product_cache_"|cat:$product->getProductId()}>
                                                <{assign var="randomttl" value=43200|mt_rand:86400}>
                                                <{get_cache name=$newcachename ttl=$randomttl assign="my_new_cached_data"}>
                                                <{if $my_new_cached_data}>
                                                    <{$my_new_cached_data}>
                                                <{else}>
                                                  <{cache name=$newcachename}>
      // Her bygger du din cache
   <{/cache}>
                                             <{/if}>

Så’n får du mere fart på dine kategorisider 😀

 

 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.