Date de publication: le samedi 12 avril 2008 à 18h11
Dernière modification: par Pascal BOYER le dimanche 26 septembre 2010 à 22h57
« Article précédent: Cacheable headers / En-têtes pouvant être mis en cache
» Article suivant: Internal caches / Caches internes
The goal of smart viewcache cleaning is to provide flexibility when cleaning the viewcache of an object's nodes. It is aimed at extending the default behavior when cleaning the cache in specific situations.
Le but du nettoyage intelligent du cache des vues est de fournir un système flexible lors du nettoyage du cache des vues des noeuds d'un objet. Ce système ambitionne d'étendre, dans certaines situations, le comportement par défaut du système de nettoyage de cache.
Voici la section à définir dans le fichier de surcharge viewcache.ini.append.php:
[ViewCacheSettings] SmartCacheClear=disabled
SmartCacheClear should be used with a set of custom rules. Enabling SmartCacheClear can actually slow down the publishing process due to the need to apply the custom rules.
Le paramètre SmartCacheClear doit être utilisé conjointement à un jeu de règles personnalisées. Activer SmartCacheClear peut engendrer un ralentissement du processus de publication en raison de l'application des règles personnalisées.
Here are two practical examples to demonstrate why smart viewcache cleaning should be enabled and configured with additional rules.
Voici deux exemples pratiques expliquant les raisons pour lesquelles le nettoyage intelligent du cache des vues doit être activé et configuré conjointement à des règles supplémentaires.
Exemple 1 - Forum
Assume that we have a content structure like this:
Supposons que nous ayons la structure de contenus suivante:
eZ Publish(nodeID = 2, class_identifier = folder) | |-- Forum folder(nodeID = 58, class_identifier = folder) | |-- Interesting forum(nodeID = 59, class_identifier = forum) | |-- Topic 1(nodeID = 60, class_identifier = forum_topic) | | | |-- Reply1(nodeID = 62, class_identifier = forum_reply) | | | |-- Reply2(nodeID = 126, class_identifier = forum_reply) | | | |-- Reply3(nodeID = 127, class_identifier = forum_reply) | |-- Topic 2(nodeID = 61, class_identifier = forum_topic)
Users can add replies to Topic 1.
Les utilisateurs peuvent ajouter des réponses au Sujet 1 ( Topic 1)
By default, when SmartCacheClear is enabled and a user adds a new reply to Topic 1, the viewcache of this reply and its parent (Topic 1) is cleared.
Par défaut, lorsque le paramètre SmartCacheClear est activé et qu'un utilisateur ajoute une nouvelle réponse au Sujet 1, le cache des vues de cette réponse ainsi que celui de ses parents ( Sujet 1) est nettoyé.
Case 1 / Cas 1
Assume now that the forum name and number of posts in this forum are displayed when viewing Forum folder. By default, after a new reply is added, the cache of Forum folder is not cleared and thus the number of posts will display outdated information. To fix this, you can use the "extended" behavior of the smart viewcache cleaning system.
Supposons à présent que le nom du forum et le nombre de posts qu'il contient soient affichés lorsque s'affiche Forum folder (le répertoire Forum folder). Par défaut, après qu'une nouvelle réponse est publiée, le cache de Forum folder n'est pas nettoyé et le nombre de posts affiché ne sera donc pas actualisé. Pour remédier à cela, vous devez recourir au comportement étendu que propose le système intelligent de nettoyage de cache des vues.
The appropriate rule is as follows: if a new forum_reply is added to forum, clear the cache of the parent of forum. In this case, the following lines should be added to the viewcache.ini.append.php file:
La règle est la suivante: si un nouvel objet forum_reply est ajouté à forum alors nettoyer le cache du parent de forum. Dans ce cas les lignes ci-dessous doivent être ajoutées au fichier de surcharge viewcache.ini.append.php:
[forum_reply] DependentClassIdentifier[] DependentClassIdentifier[]=forum ClearCacheMethod=clear_parent_nodes_caches_only
For example, if you add the Reply3 object, the nodeID path is: /1/2/58/59/60/127. Then, the smart viewcache cleaning system will search for nodes where class_identifier is equal to one of the values in the DependentClassIdentifier variable. The search is conducted in reverse order: the node with nodeID=60 will be checked first, then the node with nodeID=59. The node with nodeID=60 doesn't belong to the forum class, so its cache remains untouched. The next node has nodeID=59 and belongs to the forum class, so its cache is cleared. The other nodes in the path (58,2) do not belong to the forum class, so their caches remain untouched.
Par exemple, si vous ajoutez l'objet Reply3 alors le chemin des identifiants est 1/2/58/59/60/127. Le système intelligent de nettoyage de cache des vues recherchera donc des noeuds dont le paramètre class_identifier est égal à l'une des valeurs du paramètre DependentClassIdentifier. Cette recherche s'effectue en sens inverse: le noeud dont le ID vaut 60 sera contrôlé en premier, puis se sera le tour du noeud dont le ID vaut 59. Le noeud de ID=60 n'appartenant pas à la classe forum, son cache restera inchangé. Par contre, le noeud suivant de ID=59 appartient à la classe forum. Son cache sera donc nettoyé. Les autres noeuds du chemin (58 et 2) n'appartenant pas non plus à la classe forum, leurs caches resteront inchangés.
Case 2 / Cas 2
Assume now that in addition to Case 1 we have a folder named Common folder, published under the eZ Publish folder and containing Forum folder as a related object. Since the Forum folder cache is cleared when a new forum_reply is published, the cache of Common folder has to be cleared as well. For this purpose, we need to add another rule to viewcache.ini.append.php:
Supposons maintenant qu'en plus du cas 1 nous ayons un dossier nommé Common folder, publié sous le dossier eZ Publish et contenant un objet associé Forum folder. Puisque le cache de ce dernier est nettoyé lors de la publication d'un nouvel objet forum_reply, le cache de Common folder doit également l'être. Pour cela, nous devons ajouter une nouvelle règle au fichier de surcharge viewcache.ini.append.php:
[forum] DependentClassIdentifier[] DependentClassIdentifier[]=folder ClearCacheMethod=clear_relating_caches_only MaxParents=1
Now when a new forum_reply object is created, the cache for Forum folder and Common folder need to be cleared. There are two folder nodes in the path: one with id=2 (eZ Publish) and one with id=58 (Forum folder). But we do not need to clear cache for the eZ Publish folder (nodeID=2). The MaxParents setting fixes this: folder objects that are more than one node away from the forum node are ignored.
A présent, lorsqu'un nouvel objet forum_reply est créé, le cache de Forum folder et de Common folder sont tous deux nettoyés. Il y a deux noeuds folder dans le chemin: l'un ayant pour ID 2 ( eZ Publish) et l'autre ayant pour ID 58 ( Forum folder). Cependant, il n'est pas nécessaire de nettoyer le cache du répertoire eZ Publish (de ID = 2). Le paramètre MaxParent permet donc de régler ce problème: les objets folder situés à plus d'un noeud du noeud forum seront ignorés.
The two rules from Case 1 and Case 2 can be combined and replaced with the following rule:
Les deux règles des cas 1 et 2 peuvent être combinées et remplacées par celles-ci:
[forum_reply] DependentClassIdentifier[] DependentClassIdentifier[]=folder ClearCacheMethod=clear_object_and_relating_objects_caches MaxParents=3; #If 'Forum folder' has object_id=56 for example then the rule above can be more hard by adding next lines: ObjectFilter[] ObjectFilter[]=56
The lines above restrict the rule to one folder object that has object_id=56.
Les lignes ci-dessus restreignent la règle à un objet folder ayant pour ID 56.
Exemple 2 - Galerie d'images
Assume that we have a content structure like this:
Supposons que nous ayons la structure de contenus suivante:
eZ Publish(nodeID = 2, class_identifier = folder) | |-- Gallery(nodeID = 58, class_identifier = gallery) | |-- Image 1(nodeID = 59, class_identifier = image) |-- Image 2(nodeID = 60, class_identifier = image) |-- Image 3(nodeID = 61, class_identifier = image)
By default, when SmartCacheClear is enabled and a user adds a new image to Gallery, the viewcache of this image and its parent (Gallery) is cleared.
Par défaut, lorsque le paramètre SmartCacheClear est activé et qu'un utilisateur ajoute une nouvelle image à l'objet Gallery, le cache des vues de l'image et de ses parents ( Gallery) est nettoyé.
In our example, assume that we need to display images stored under the Gallery subtree in the full view but also in each image view. In this case, when the new image is published we need to clear the viewcache of the parent (Gallery), the new uploaded image and its siblings. Without configuring smart viewcache rules, the other images (the siblings) are outdated.
Supposons, dans notre exemple, que nous souhaitions afficher des images stockées dans le sous-répertoire Gallery avec le mode de vue full mais également dans chaque vue image (???). Dans ce cas, nous devons, lorsqu'une nouvelle image est publiée, nettoyer le cache des vues des parents (c'est à dire de Gallery), de la nouvelle image ainsi que de ses frères et soeurs. Sans configurer les règles du système intelligent de nettoyage du cache des vues les autres images (frères et soeurs) ne seront pas à jour.
The appropriate rule is as follows: if a new image is added to Gallery, clear the cache of the parent of the Gallery but also of the siblings. In this case, the following lines should be added to the viewcache.ini.append.php file:
La règle est la suivante: lorsqu'un nouvel objet image est ajouté à l'objet Gallery, nettoyer alors le cache des parents de Gallery mais également ceux de ses frères et soeurs. Dans ce cas, les lignes suivantes doivent être ajoutées au fichier de surcharge viewcache.ini.append.php:
[image] DependentClassIdentifier[] DependentClassIdentifier[]=gallery ClearCacheMethod[] ClearCacheMethod[]=parent ClearCacheMethod[]=siblings MaxParents=1
Commentaires














