Cachify : la qualité allemande ?

Un plugin de cache d’une simplicité déconcertante et compatible avec beaucoup beaucoup de configurations.

J’ai découvert ce plugin très récemment et le mets à l’essai sur mes blogs et ma page perso. Son interface d’administration est on ne peut plus simple, les choix sont clairs et restreints à l’essentiel. Belle surprise !

Les mauvais points

La documentation est très complète mais la langue est l’Allemand. Le plugin est traduit en Anglais mais pas la documentation ouch :/, heureusement pour vous j’ai fait Allemand 1ère langue donc une des rares fois où je vais en trouver l’utilité.

La cible n’est clairement pas l’utilisateur casual qui souhaite un support réactif et ne pas se préoccuper plus que ça de ce qui se passe.

En fait, il s’agit d’une niche (si on peut parler cela pour un plugin gratuit wink  ), d’après moi les utilisateurs avancés qui ont la main sur leur serveur ou sur des mutus de qualité.

Pas de support pour le memcache attention j’ai pas dit memcached.

Le large spectre

  • Le plugin est compatible à la fois nginx et apache (directives fournies dans la doc)
  • Compatible multisite
  • Compatible WooCommerce
  • Compatible WPSEO
  • Minify

Le fonctionnement

Général

Au choix :

  • en base
  • par fichiers statiques (copie HTML et gzip)

Je recommande la 2ème solution plus performante (y a un rapport du simple au double) mais c’est intéressant d’avoir le choix notamment pour combiner avec d’autres outils ce qui a été prévu par les développeurs. Quand je parlais de niche plus haut, on retrouve ce bon sens à ne pas se lancer dans toutes les directions, il ne s’agit pas d’un plugin générique. Cela ne le rend ni meilleur ni moins bon mais plus adaptable si vous êtes développeur.

MAJ et vidage du cache

La mise en cache et la suppression se font automatiquement mais il y a un bouton pour effacer le cache à la fois dans le dashboard at glance et sur la barre d’administration (icône poubelle).

La mise à jour d’un article effacera totalement ou simplement la page de l’article mise en cache. Par défaut le cache entier est supprimé mais ceci peut être modifié grâce à un menu déroulant.

Le plugin effacera aussi le cache, automatiquement cette fois, dans les cas suivants :

  • publication d’un nouvel article
  • publication d’une nouvelle page
  • publication d’un nouveau CPT (custom post type)
  • publication d’un article programmé (seulement avec cachify en mode base de données)
  • lorsqu’un post est mis à la corbeille

Sont exclus d’office

  • les flux
  • les trackbacks
  • les pages de recherche
  • les thèmes mobiles  (WP-Touch, Carrington, Jetpack Mobile)
  • les 404
  • les articles protégés par un mot de passe

Vous pourrez exclure des posts via leurs IDs sur la page d’options.

Matériel requis et optionnel

  • WordPress 3.8 (minimum)
  • PHP 5.2.4 (minimum)
  • APC 3.1.4 (optionnel)
  • Memcached 1.4.15 (optionnel)

Directives htaccess pour les serveurs Apache

La documentation fournit le code nécessaire à une utilisation du cache en mode disc (fichiers statiques) :

# BEGINN CACHIFY

    # ENGINE ON
    RewriteEngine On

    # GZIP FILE

        RewriteCond %{REQUEST_URI} /$
        RewriteCond %{REQUEST_URI} !^/wp-admin/.*
        RewriteCond %{REQUEST_METHOD} !=POST
        RewriteCond %{QUERY_STRING} =""
        RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_
        RewriteCond %{HTTP:Accept-Encoding} gzip
        RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html.gz -f
        RewriteRule ^(.*) /wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html.gz [L]

        AddType text/html .gz
        AddEncoding gzip .gz


    # HTML FILE
    RewriteCond %{REQUEST_URI} /$
    RewriteCond %{REQUEST_URI} !^/wp-admin/.*
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_
    RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html -f
    RewriteRule ^(.*) /wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html [L]

# END CACHIFY

A placer en tout début de fichier !

Fichier de configuration nginx

La documentation fournit le code nécessaire à une utilisation du cache en mode disc (fichiers statiques) :

## GZIP
gzip_static on;

## CHARSET
charset utf-8;

## INDEX LOCATION
location / {
    if ( $query_string ) {
        return 405;
    }
    if ( $request_method = POST ) {
        return 405;
    }
    if ( $request_uri ~ /wp-admin/ ) {
        return 405;
    }
    if ( $http_cookie ~ (wp-postpass|wordpress_logged_in|comment_author)_ ) {
        return 405;
    }

    error_page 405 = @nocache;

    try_files /wp-content/cache/cachify/${host}${uri}index.html @nocache;
}

## NOCACHE LOCATION
location @nocache {
    try_files $uri $uri/ /index.php?$args;
}

## PROTECT CACHE
location ~ /wp-content/cache {
    internal;
}

Des filtres? Des actions?

Oui, notamment cachify_skip_cache et pour les actions :

if ( has_action('cachify_flush_cache') ) {
    do_action('cachify_flush_cache');
}

if ( has_action('cachify_remove_post_cache') ) {
    do_action('cachify_remove_post_cache', 123); // postID
}

Conclusion

Un plugin très complet, libre et souple. Pas de licence, une compatibilité avancée avec différents types de serveurs et d’extensions phares de WP. Rapide à mettre en place et simple à configurer.

Cette extension s’adresse clairement aux développeurs, du moins aux utilisateurs avancés qui souhaitent avoir la main sur le code et pourquoi pas combiner la solution avec leurs propres scripts. Très prometteur mais sous réserve de tests plus poussés tout de même.

J’ai tenté de vous traduire les points principaux, l’Allemand peut s’avérer assez indigeste de prime abord ^^.  Tout n’a donc pas été exploré non plus dans ce billet. N’hésitez pas à faire vos retours.