Opprett en tilpasset caching-adapter i OpenCart

Uansett webrammen du jobber med, caching er et viktig verktøy for å ha i katten for å forbedre den generelle ytelsen til nettstedet ditt. Du har forskjellige caching mekanismer å velge mellom, som fil, APC, Memcached og mer. Du kan bestemme basert på dine krav, og noen ganger tar det en kombinasjon av mer enn ett adapter for å rettferdiggjøre ønsket utfall.

OpenCart inneholder allerede et par cache-adaptere i kjernen, og det er det som gir en mal å følge hvis du vil lage en egendefinert. For å implementere en tilpasset adapter, trenger du bare å lage metoder i henhold til kontrakten, og inkludere logikken din i hver metode, og du er ferdig! Den blir hentet automatisk som en del av OpenCart-caching-mekanismen.

For hver cache-adapter er det bare den underliggende mekanismen for å lagre og hente data som endres. Det samme gjelder for vår tilpassede database-caching-adapter, og det er derfor vi trenger å lage et egendefinert skjema som inneholder caching-dataene.

Pass på at du har installert den nyeste versjonen av OpenCart før vi går videre, og begynn å lage en tilpasset adapter.

Opprett et adapter-skjema

Det er en dbcache MySQL-tabellen som skal holde våre caching-data. Så la oss lage den!

CREATE TABLE IF NOT EXISTS 'DB_PREFIX dbcache' ('tasten' varchar (255) IKKE NULL, 'verdi' longblob IKKE NULL, 'utløper' int (11) IKKE NULL) MOTOR = InnoDB DEFAULT CHARSET = utf8;

Det viktige å merke seg her er database prefiks; Hvis du bruker det, må du sørge for at du oppgir bordet ditt i henhold til dette. For eksempel, i tilfelle av database prefiks oc_, Du bør opprette et bord som heter oc_dbcache.

Annet enn det, er bordets struktur ganske enkel, og den inneholder bare tre kolonner-nøkkel, verdi og utløper. Nøkkelkolonnen inneholder caching-nøkkelen, verdikolonnen inneholder den tilknyttede verdien, og kolonnen for utløp holder UNIX-tidsstempel.

Opprett en adapterfil

Du finner alle caching-adaptere levert av OpenCart under system \ bibliotek \ cache katalogen. Vår tilpassede adapter må også gå dit, så la oss lage en fil system \ bibliotek \ cache \ database.php med følgende innhold.

utløper = $ utløper; $ Dette-> initDbInstance ();  / ** * Hjelpermetode for å opprette DB-forekomst * / privat funksjon initDbInstance () hvis (is_null (statisk :: $ _ db)) statisk :: $ _ db = ny \ DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE , DB_PORT);  / ** * Hent verdien lagret i cachen med nøkkel * * @param-streng $ nøkkel Cache-nøkkel * * @return blandet Verdi av cachenøkkel hvis funnet, boolean falsk ellers * / offentlig funksjon få ($ nøkkel) $ spørring = "". $ key. "'og' utløper '> ='" .tid (). '' "); hvis ($ query-> num_rows) return unserialize ($ query-> row ['value']);  returner falsk;  / ** * Angi cacheværdien med nøkkel * * @param-streng $ nøkkel Cache-nøkkel * @param blandet $ verdi Cache-verdi * / offentlig funksjonssett ($ nøkkel, $ verdi) $ this-> delete ($ key) ; statisk :: $ _ db-> spørring ("INSERT INTO". DB_PREFIX. "dbcache SET '-tasten' = '". $ key. "', 'value' = '". mysql_escape_string (serialize ($ value)). , 'utløpe' = '". (tid () + $ dette-> utløper)."' ");  / ** * Slett verdien lagret i cachen med nøkkel * * @param streng $ nøkkel Cache-nøkkel * / offentlig funksjon slette ($ nøkkel) statisk :: $ _ db-> spørring ("DELETE FROM". DB_PREFIX. "Dbcache WHERE 'key' = '". $ Key."' "); 

I henhold til konvensjonene, klassen database er definert under cache navnerom. Det er to egenskaper, $ _db og $ utløper$ _db holder databasen forekomst, og $ utløper er satt til cache livstid når klassen er instantiated. Årsaken bak å erklære $ _db Egenskapen som statisk er singleton-objektet den inneholder.

I konstruktøren av klassen tilordner vi cachetiden som går fra OpenCart-rammeverket til $ utløper eiendom og ringer til initDbInstance metode definert i samme klasse som oppretter og tilordner en database forekomst til $ _db hvis den ikke allerede eksisterer.

Deretter Metoden brukes til å hente en cacheoppføring med nøkkel og utløpsdato, og sett Metoden brukes til å sette inn en ny cacheoppføring i databasen. Vi serierer også hurtigbufferdataene i sett metode for å sikre at den er lagret riktig. Selvfølgelig må vi unserialisere det i metode før vi faktisk returnerer den!

Til slutt er det a slette metode som sletter en oppføring fra databasen. Det er interessant å merke seg at den angitte metoden kaller slettemetoden hver gang for å sikre at vi ikke ender opp med å opprette dupliserte cacheposter!

Så, det er så langt som vår tilpassede caching-adapter filoppsett er opptatt. I neste avsnitt ser vi hvordan du kobler den til OpenCart-kjernerammen.

Koble til vår egendefinerte Caching-adapter

Dessverre er det ingen back-end-konfigurasjon som lar deg koble til din egendefinerte caching-adapter. Så, for denne veiledningens skyld, vil vi fortsette og direkte påvirke måten den håndteres i kjernen.

Gå videre og åpne index.php under dokumentroten til nettstedet ditt.

Finn følgende utdrag.

$ cache = ny cache ('fil');

Erstatt den med:

$ cache = ny Cache (database);

Så, som du kan se, har vi nettopp forandret argumentet, eller snarere adapternavnet, som er bestått når du oppretter en ny $ cache gjenstand.

På samme måte, gjør det for index.php fil som ligger under admin katalogen. Det sørger for at både front-end og back-end bruker vår egendefinerte caching-adapter.

Du er nesten ferdig! Gå videre og besøk et par sider i front-end og back-end, og du bør se at dbcache MySQL-tabellen fylles opp med nye poster!

På denne måten kan du gå videre og lage en cache-adapter for andre lagringsmotorer også. Selv om vi har demonstrert det på en enkel måte, tror jeg det er konseptet som betyr mest for din neste tilpassede adapter!

Konklusjon

Som alltid, hvis du leter etter ekstra OpenCart-verktøy, verktøy, utvidelser og så videre som du kan utnytte i dine egne prosjekter eller for din egen utdanning, ikke glem å se hva vi har tilgjengelig på markedet.

I dag har vi diskutert hvordan du oppretter en tilpasset hurtigbufferadapter i OpenCart. Databasen caching adapter ble opprettet i prosessen for demonstrasjon. Du er velkommen til å legge inn dine spørsmål ved å bruke feedet under!