Begrijp Caching in OpenCart

Tegenwoordig kun je het je niet veroorloven om zelfs een paar minuten offline te gaan als je te maken hebt met een wereldwijd publiek, omdat het je concurrent de kans geeft te bewijzen dat ze voor je liggen.

Caching is een belangrijke factor als je te maken hebt met webontwikkeling. Het helpt echt om het zware werk te ontlasten dat een webserver moet doen om duizenden verzoeken te dienen, zo niet miljoenen tegelijk. Er zijn tegenwoordig tal van opties beschikbaar die een prestatieverbetering bieden voor uw webapplicatie, maar de basis concept van caching blijft hetzelfde.

Het doel van caching

Voorbij zijn de dagen dat je gewoon een statische HTML-website moest bouwen die een paar pagina's bevatte en je klaar was. In dat geval hoefde u zich geen zorgen te maken over de gelijktijdige verzoeken en het zware verkeer gegenereerd op uw website, omdat het zoveel sneller is om die statische HTML-pagina's te verzenden in vergelijking met de dynamische webpagina's waarvoor nogal wat serverbronnen nodig zijn om te bouwen zich.

Een typische dynamische pagina doet veel, van het opvragen van een database tot het ophalen van gegevens van externe serviceproviders. Het vereist veel om een ​​pagina weer te geven die veel informatie in verschillende formaten bevat. In het bijzonder kunt u het zich niet veroorloven om de database te ondervragen om dezelfde complexe informatie op te halen voor elk verzoek naarmate het verkeer toeneemt. Het zal uw servers snel krap maken voor bronnen, en voordat u iets kunt doen, zijn ze verdwenen!

Dus je hebt iets tussenin nodig dat de zaken versnelt, en dat is waar caching in beeld komt. Het idee van caching is heel eenvoudig: u slaat de berekende / opgemaakte resultaten ergens op en haalt ze op wanneer dat nodig is, zodat u het niet nog een keer hoeft te doen. Dat "ergens" kan overal zijn: het bestandssysteem, het geheugen of de database zelf.

Er zijn ook veel opties beschikbaar voor caching-memcached, Redis, Varnish en meer. U zou die volgens uw vereisten kunnen gebruiken, en soms helpt de combinatie van meerdere componenten ook om de prestaties exponentieel te verbeteren.

Aangezien het een complete serie zou vergen om de ins en outs van caching uit te leggen, en ook iets buiten de scope van dit artikel, komen we terug in de OpenCart-context en gaan we hiermee verder in de volgende sectie.

We gebruiken de nieuwste versie van OpenCart, dus zorg ervoor dat je die hebt geïnstalleerd om de code te volgen.

Hoe Basic Caching werkt in OpenCart

De cachebibliotheek wordt in de kern zelf geleverd, dus laten we het meteen verkennen. Ga je gang en open de System / Library / cache.php bestand in uw favoriete teksteditor.

cache = nieuwe $ class ($ expire);  else exit ('Fout: kan cachestuurprogramma niet laden'. $ driver. 'cache!');  public function get ($ key) return $ this-> cache-> get ($ key);  public function set ($ key, $ value) return $ this-> cache-> set ($ key, $ value);  public function delete ($ key) return $ this-> cache-> delete ($ key); 

Beginnend met de constructor initialiseert het de cache-driver die is doorgegeven in het constructor-argument. Als de klasse beschikbaar is voor de gevraagde caching-adapter, wordt deze geïnitialiseerd naar de $ This-> cache eigenschap, anders wordt het afgesloten met de foutmelding. We zullen de verschillende caching-adapters in het volgende gedeelte bekijken.

Er zijn ook drie wrapper-functies die worden gebruikt om alle bewerkingen met betrekking tot caching uit te voeren.

De krijgen methode wordt gebruikt om de waarde uit de cache op te halen.

$ This-> cache-> krijgen ($ key);

De reeks methode wordt gebruikt om de waarde in de cache op te slaan.

$ this-> cache-> set ($ key, $ value);

De verwijderen methode wordt gebruikt om de sleutel / waarde-toewijzing uit de cache te verwijderen.

$ This-> cache-> delete ($ key);

Het is dus heel eenvoudig om cachefuncties ook in uw modules te gebruiken.

Er zijn veel plaatsen in de front-end waar de gegevens worden opgehaald uit de cache store. Laten we een paar van hen opnoemen:

  • nieuwste producten
  • bestseller-producten
  • lijst van fabrikanten
  • lijst van landen
  • lijst met valuta's
  • lijst met zones
  • winkelinstellingen

In het geval van bestandscache vindt u alle cachebestanden die zijn opgeslagen onder de system / cache directory. Hoewel OpenCart de cache bij de juiste gebeurtenissen wist, kunt u deze bestanden ook handmatig wissen om de nieuwste gegevens op te halen.

Dus dat is het voor zover het de caching-wrapper betreft. In het volgende gedeelte zien we de verschillende caching-adapters die beschikbaar zijn in de kern en het daadwerkelijke zware werk dat door hen wordt gedaan.

Caching-adapters

Er zijn drie caching-adapters beschikbaar in de kern van OpenCart-bestand, memcache en apc. De standaard caching-adapter die in OpenCart wordt gebruikt, is een bestand.

Hier is het fragment van index.php die de initialiseert $ cache object met de standaard caching-adapter.

// Cache $ cache = nieuwe cache ('bestand'); $ registry-> set ('cache', $ cache);

Helaas is er geen configureerbare manier om de caching-adapter te verwisselen omdat deze hard gecodeerd is. Dat gezegd hebbende, kon je OCMOD gebruiken om de standaard caching-adapter te wijzigen zonder het kernbestand te wijzigen.

Omdat de implementatie van elke caching-adapter bijna hetzelfde is, kijken we alleen naar een van de caching-adapters om te zien wat er aan de hand is. Laten we memcache nemen, bijvoorbeeld. Ga je gang en open System / Library / cache / mem.php. Je kunt ook de andere twee adapters verkennen file.php en apc.php in dezelfde map.

expire = $ expire; $ this-> cache = new \ Memcache (); $ this-> cache-> pconnect (CACHE_HOSTNAME, CACHE_PORT);  public function get ($ key) return $ this-> cache-> get (CACHE_PREFIX. $ key);  openbare functieset ($ key, $ value) return $ this-> cache-> set (CACHE_PREFIX. $ key, $ value, MEMCACHE_COMPRESSED, $ this-> expire);  public function delete ($ key) $ this-> cache-> delete (CACHE_PREFIX. $ key); 

Elke caching-adapter wordt gedefinieerd onder de naamruimte "Cache" om conflicten te voorkomen.

Denk aan de methoden die we in het laatste gedeelte hebben besproken - ze komen hier eigenlijk terecht. Dus als je de krijgen methode in de Cache klasse, het roept eigenlijk het krijgen methode gedefinieerd in de werkelijke adapterklasse - in dit geval is het de Mem klasse.

De feitelijke logica van het manipuleren van de cachevermeldingen vindt plaats in de methoden van de adapterklasse. Zoals je kunt zien, in de constructor van de Mem klasse hebben we het Memcache-object geïnitialiseerd en de verbinding tot stand gebracht met behulp van de pconnect methode. Ten slotte gebruiken we de methoden get, set en delete van het Memcache-object om de cachevermeldingen te manipuleren.

Als u daarentegen de implementatie van de bestandscache-handler bekijkt, hoeft u slechts een beetje moeite te doen om cacheboekingen op te slaan en op te halen met behulp van bestandssysteemfuncties. Afgezien daarvan is er geen verschil in de implementatie.

Dus dat is het voor zover het caching-adapters betreft in OpenCart. Natuurlijk kunt u indien nodig uw eigen caching-handler maken. U hoeft alleen de vereiste methoden te implementeren en u bent klaar.

Dat is het voor vandaag. Ik hoop dat je de tutorial leuk vond en dat het je zal aanmoedigen om caching te gebruiken in je aangepaste modules als dat nodig is.

Conclusie

Vandaag hebben we caching besproken in OpenCart. We zijn begonnen met de basis van caching en toen we verder gingen, hebben we onderzocht hoe caching in de front-end wordt gebruikt. Ten slotte hebben we de verschillende caching-adapters doorgenomen die beschikbaar zijn in OpenCart.

Voel je vrij om je gedachten te uiten in de vorm van vragen en suggesties met behulp van de onderstaande feed.