Quel que soit le framework Web sur lequel vous travaillez, la mise en cache est un outil important à avoir dans le chat pour améliorer les performances globales de votre site Web. Vous avez le choix entre différents mécanismes de mise en cache, tels que fichier, APC, Memcached, etc. Vous pouvez décider en fonction de vos besoins, et parfois, il faut une combinaison de plusieurs adaptateurs pour justifier le résultat souhaité..
OpenCart inclut déjà quelques adaptateurs de mise en cache dans le noyau, et c'est ce qui fournit un modèle à suivre si vous souhaitez en créer un personnalisé. Pour implémenter un adaptateur personnalisé, il vous suffit de créer des méthodes conformément au contrat et d'inclure votre logique dans chaque méthode, et vous avez terminé! Il sera repris automatiquement dans le cadre du mécanisme de mise en cache OpenCart..
Pour chaque adaptateur de mise en cache, seul le mécanisme sous-jacent permettant de stocker et de récupérer les données change. Il en va de même pour notre adaptateur de mise en cache de base de données personnalisé également. C'est pourquoi nous devons créer un schéma personnalisé contenant les données de mise en cache..
Assurez-vous d'avoir installé la dernière version d'OpenCart avant de commencer et de créer un adaptateur personnalisé..
C'est un dbcache
Table MySQL qui va contenir nos données de cache. Alors, créons le!
CREATE TABLE IF NOT NOT EXISTS 'DB_PREFIX dbcache' ('key' varchar (255) NOT NULL, 'valeur' longblob NOT NULL, 'expire' int (11) NOT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8;
La chose importante à noter ici est le préfixe de la base de données; si vous l'utilisez, assurez-vous de nommer votre table en conséquence. Par exemple, dans le cas du préfixe de base de données oc_
, vous devriez créer une table nommée oc_dbcache
.
En dehors de cela, la structure de la table est assez simple et ne contient que trois colonnes: clé, valeur et expire. La colonne key contient la clé de mise en cache, la colonne value contient la valeur associée et la colonne expire contient l'horodatage UNIX..
Vous trouverez tous les adaptateurs de mise en cache fournis par OpenCart sous la rubrique système \ bibliothèque \ cache
annuaire. Notre adaptateur personnalisé doit y aller aussi, alors créons un fichier system \ library \ cache \ database.php
avec le contenu suivant.
expire = $ expire; $ this-> initDbInstance (); / ** * Méthode d'assistance pour créer une instance de base de données * / private function initDbInstance () if (is_null (static :: $ _db)) static :: $ _ db = new \ DB (DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE , DB_PORT); / ** * Récupère la valeur stockée dans le cache par la clé * * @ @param chaîne $ key Clé du cache * * * @return mixed Valeur de la clé du cache, le cas échéant, boolean false sinon * / public function get ($ key) $ query = static :: $ _ db-> query ("SELECT * FROM" ". DB_PREFIX." dbcache "WHERE 'key" = "". key key "" "AND" expire "> =". time (). "" "); if ($ query-> num_rows) return unserialize ($ query-> row ['value']); return false; / ** * Définition de la valeur de cache par clé * * @param chaîne $ key Clé de cache * @param mixed $ value Valeur de cache * / public function set ($ key, $ value) $ this-> delete ($ key) ; static :: $ _ db-> query ("INSERT INTO". DB_PREFIX. "dbcache SET 'key' = '". $ key. "', 'value' = '". mysql_escape_string (serialize ($ value)). "" , 'expire' = '". (time () + $ this-> expire)." ""); / ** * Supprimer la valeur stockée dans la mémoire cache par la clé * * @ @param chaîne $ clé clé de cache * / fonction publique delete ($ key) static :: $ _db-> query ("DELETE FROM". DB_PREFIX. "Dbcache WHERE 'key' = '". $ Key."' ");
Selon les conventions, la classe Base de données
est défini sous le Cache
espace de noms. Il y a deux propriétés, $ _db
et $ expire
. $ _db
contient l'instance de base de données, et $ expire
est défini sur la durée de vie en cache lorsque la classe est instanciée. La raison derrière la déclaration du $ _db
propriété statique est l'objet singleton qu'il détient.
Dans le constructeur de class, nous attribuons le temps de mise en cache passé de la structure OpenCart à la $ expire
propriété et appelant le initDbInstance
méthode définie dans la même classe qui crée et affecte une instance de base de données à $ _db
s'il n'existe pas déjà.
Ensuite, le obtenir
méthode est utilisée pour récupérer une entrée de cache par clé et le temps d’expiration, et le ensemble
Cette méthode est utilisée pour insérer une nouvelle entrée de cache dans la base de données. En outre, nous sérialisons les données de cache dans le ensemble
méthode pour vous assurer qu'il est stocké correctement. Bien sûr, nous devons le désérialiser dans le obtenir
méthode avant de le retourner réellement!
Enfin, il y a un effacer
méthode qui supprime une entrée de la base de données. Il est intéressant de noter ici que la méthode set appelle la méthode delete à chaque fois pour s'assurer que nous ne créons pas d'entrées de cache en double.!
C’est donc tout ce qui concerne la configuration de notre fichier d’adaptateur de mise en cache personnalisé. Dans la section suivante, nous verrons comment le connecter au framework OpenCart..
Malheureusement, aucune configuration d’arrière-plan ne vous permet de connecter votre adaptateur de mise en cache personnalisé. Donc, dans l'intérêt de ce tutoriel, nous allons aller de l'avant et influencer directement la façon dont il est géré dans le noyau.
Allez-y et ouvrez index.php
sous la racine du document de votre site.
Trouver l'extrait suivant.
$ cache = new Cache ('fichier');
Remplacez-le par:
$ cache = new Cache (database ');
Ainsi, comme vous pouvez le constater, nous venons de modifier l’argument, ou plutôt le nom de l’adaptateur, qui a été transmis lors de la création d’un nouveau fichier. $ cache
objet.
De la même manière, faites-le pour le index.php
fichier qui réside sous le admin
annuaire. Il s'assure que les serveurs frontaux et principaux utilisent notre adaptateur de mise en cache personnalisé..
Vous avez presque fini! Allez-y et visitez quelques pages du front-end et du back-end, et vous devriez voir que le dbcache
La table MySQL est en train d'être remplie avec de nouveaux enregistrements!
De cette manière, vous pouvez également créer un adaptateur de mise en cache pour d'autres moteurs de stockage. Bien que nous l'ayons démontré de manière simple, je pense que c'est le concept qui compte le plus pour votre prochain adaptateur personnalisé.!
Comme toujours, si vous recherchez des outils, utilitaires, extensions, etc., OpenCart supplémentaires que vous pouvez exploiter dans vos propres projets ou pour votre propre éducation, n'oubliez pas de voir ce que nous avons sur le marché..
Aujourd'hui, nous avons expliqué comment créer un adaptateur de mise en cache personnalisé dans OpenCart. L'adaptateur de mise en cache de base de données a été créé dans le processus de démonstration. N'hésitez pas à poster vos requêtes en utilisant le flux ci-dessous!