Ongeacht het webraamwerk waarmee u werkt, caching is een belangrijk hulpmiddel om in de pot te hebben om de algehele prestaties van uw website te verbeteren. Je hebt verschillende cachemogelijkheden om uit te kiezen, zoals bestand, APC, Memcached en meer. U kunt beslissen op basis van uw vereisten en soms is een combinatie van meer dan één adapter vereist om het gewenste resultaat te rechtvaardigen.
OpenCart bevat al een aantal caching-adapters in de kern, en dat is wat een sjabloon biedt om te volgen als u een aangepaste wilt maken. Om een aangepaste adapter te implementeren, hoeft u alleen maar methoden te maken volgens het contract en uw logica in elke methode op te nemen, en u bent klaar! Het wordt automatisch opgehaald als onderdeel van het OpenCart caching-mechanisme.
Voor elke caching-adapter is het alleen het onderliggende mechanisme voor het opslaan en ophalen van gegevens die veranderen. Hetzelfde geldt voor onze aangepaste database-caching-adapter, en daarom moeten we een aangepast schema maken met de cachegegevens.
Zorg ervoor dat u de nieuwste versie van OpenCart hebt geïnstalleerd voordat u doorgaat en begin met het maken van een aangepaste adapter.
Het is een dbcache
MySQL-tabel die onze cachegegevens zal bevatten. Dus laten we het maken!
MAAK TABLE INDIEN NIET BESTAAT 'DB_PREFIX dbcache' ('key' varchar (255) NOT NULL, 'value' longblob NOT NULL, 'expire' int (11) NOT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Het belangrijkste om op te merken is het databaseprefix; als u het gebruikt, zorg ervoor dat u uw tabel dienovereenkomstig een naam geeft. Bijvoorbeeld in het geval van een databaseprefix oc_
, je zou een tabel moeten maken met de naam oc_dbcache
.
Anders dan dat, de structuur van de tabel is vrij eenvoudig, en het bevat slechts drie kolommen-toets, waarde en verval. De sleutelkolom bevat de cachegeheugelsleutel, de waardekolom bevat de bijbehorende waarde en de vervalkolom bevat de UNIX-tijdstempel.
U vindt alle caching-adapters die door OpenCart worden aangeboden onder de system \ library \ cache
directory. Onze aangepaste adapter moet daar ook naartoe gaan, dus laten we een bestand maken system \ library \ cache \ database.php
met de volgende inhoud.
expire = $ expire; $ This-> initDbInstance (); / ** * Helper-methode om DB-instantie * / persoonlijke functie te maken initDbInstance () if (is_null (statisch :: $ _ db)) statisch :: $ _ db = nieuw \ DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE DB_PORT); / ** * Haal de waarde op die is opgeslagen in de cache per sleutel * * @param string $ key Cache Key * * @return mixed Waarde van de cachesleutel indien gevonden, boolean false anders * / public function get ($ key) $ query = static :: $ _ db-> query ("SELECT * FROM '". DB_PREFIX. "dbcache' WHERE 'key' = '". $ key. "' AND 'expire'> = '". time (). "' "); if ($ query-> num_rows) return unserialize ($ query-> row ['value']); return false; / ** * Stel de cachewaarde in met de sleutel * * @param string $ key Cache Key * @param mixed $ waarde Cache value * / public function set ($ key, $ value) $ this-> delete ($ key) ; static :: $ _ db-> query ("INVOEGEN IN". DB_PREFIX. "dbcache SET 'key' = '". $ key. "', 'value' = '". mysql_escape_string (serialize ($ value)).' ' , 'expire' = '". (time () + $ this-> expire)."' "); / ** * Verwijder de waarde opgeslagen in cache per sleutel * * @param string $ key Cache Key * / public function delete ($ key) static :: $ _ db-> query ("DELETE FROM". DB_PREFIX. "Dbcache WHERE 'key' = '". $ Key."' ");
Volgens de conventies, de klas Database
is gedefinieerd onder de Cache
namespace. Er zijn twee eigenschappen, $ _db
en $ vervallen
. $ _db
bevat de database-instance en $ vervallen
is ingesteld om de levensduur van de cache in te stellen wanneer de klasse wordt geïnstantieerd. De reden achter het verklaren van de $ _db
eigenschap als statisch is het singleton-object dat het bevat.
In de constructor van klasse wijzen we de caching-tijd aan die is doorgegeven van het OpenCart-framework naar de $ vervallen
eigendom en de initDbInstance
methode gedefinieerd in dezelfde klasse die een database-instantie maakt en toewijst aan $ _db
als het nog niet bestaat.
Vervolgens de krijgen
methode wordt gebruikt om een cache-item op te halen per sleutel en verlooptijd, en de reeks
methode wordt gebruikt om een nieuw cache-item in de database in te voegen. We serialiseren ook de cachegegevens in de reeks
methode om te controleren of deze correct is opgeslagen. Natuurlijk moeten we het in de krijgen
methode voordat we deze daadwerkelijk retourneren!
Eindelijk is er een verwijderen
methode die een item uit de database verwijdert. Het is interessant om hier op te merken dat de ingestelde methode elke keer de delete-methode aanroept om ervoor te zorgen dat we geen dubbele cachevermeldingen aanmaken!
Dus dat is het voor zover het onze configuratie van de aangepaste caching-adapterbestanden betreft. In het volgende gedeelte zullen we zien hoe u het aansluit op het kernraamwerk van OpenCart.
Helaas is er geen back-end-configuratie waarmee u uw aangepaste caching-adapter kunt aansluiten. Dus, in het belang van deze tutorial, zullen we doorgaan en direct invloed hebben op de manier waarop het in de kern wordt behandeld.
Ga je gang en open index.php
onder de document root van uw site.
Zoek het volgende fragment.
$ cache = nieuwe cache ('bestand');
Vervang het door:
$ cache = nieuwe cache (database ');
Zoals u kunt zien, hebben we zojuist het argument gewijzigd, of liever de adapternaam, die is doorgegeven bij het maken van een nieuwe $ cache
voorwerp.
Op dezelfde manier, doe het voor de index.php
bestand dat zich onder de beheerder
directory. Het zorgt ervoor dat zowel de front-end als de back-end onze aangepaste caching-adapter gebruiken.
Je bent bijna klaar! Ga je gang en bezoek een paar pagina's in de front-end en back-end, en je zou moeten zien dat de dbcache
MySQL-tabel wordt gevuld met nieuwe records!
Op deze manier kunt u ook een caching-adapter voor andere opslaglocaties maken. Hoewel we het op een eenvoudige manier hebben gedemonstreerd, denk ik dat het concept het belangrijkst is voor je volgende aangepaste adapter!
Zoals altijd, als u op zoek bent naar aanvullende OpenCart-hulpmiddelen, hulpprogramma's, uitbreidingen en dergelijke die u kunt gebruiken in uw eigen projecten of voor uw eigen opleiding, vergeet dan niet te zien wat we beschikbaar hebben op de markt.
Vandaag hebben we besproken hoe u een aangepaste caching-adapter kunt maken in OpenCart. De database-caching-adapter is tijdens het demonstratieproces gemaakt. Aarzel niet om uw vragen te plaatsen met behulp van de onderstaande feed!