IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

PHP : la bonne pratique

Apprendre les bonnes pratiques de programmation en PHP


précédentsommairesuivant

XIII. Cache

Le PHP est plutôt rapide en lui-même, mais certains points de congestion peuvent apparaître quand vous établissez des connexions distantes, des chargements de fichiers, etc. Heureusement, il y a de nombreux outils disponibles pour accélérer certaines parties de vos applications ou pour réduire le nombre de fois où ces actions consommatrices de temps ont besoin de se lancer.

XIII-A. Cache du bytecode

Quand un fichier PHP est exécuté, il est d'abord compilé sous forme de bytecode (aussi connu sous le nom d'opcode) puis ce bytecode est ensuite exécuté. Si le fichier PHP n'est pas modifié, le bytecode restera toujours le même ce qui signifie que sa compilation lors de chaque appel sera une perte de ressources CPU.

C'est là que le cache du bytecode intervient. Il empêche la compilation récurrente en stockant le bytecode en mémoire et en le réutilisant à chaque appel successif. Mettre en place le cache ne prend que quelques minutes, mais cela
augmentera de façon significative la réactivité de votre application. Il n'y a donc aucune raison de ne pas l'utiliser.

Avec PHP 5.5, il existe un cache intégré pour le bytecode appelé OPcache. Il est aussi disponible pour les versions précédentes.

Les autres caches pour bytecode sont :

XIII-B. Cache des objets

Il arrive parfois qu'il soit plus avantageux de mettre en cache des objets individuels dans votre code par exemple dans les cas où l'on souhaite récupérer le même résultat provenant d'une base de données. Vous pouvez utiliser des logiciels de cache objet pour maintenir ces bouts de données en mémoire pour un usage ultérieur. Si vous enregistrez ces éléments en mémoire après les avoir récupérés, vous pouvez considérablement gagner en rapidité d'accès, de même qu'une réduction de l'utilisation de la base de données.

Beaucoup des solutions de cache du bytecode vous permettent de mettre aussi en cache les données, il y a donc encore plus d'avantages à les utiliser. APCu, XCache, et WinCache fournissent tous des API pour stocker les données de votre code PHP dans leur système de cache mémoire.

Les systèmes de cache objet les plus courants sont APCu and memcached. APCu est un excellent choix en ce qui concerne le cache objet, il inclut une API simple pour ajouter vos propres données dans son cache et est très facile à configurer. La seule vraie limitation d'APCu est qu'il est lié au serveur où il est installé. Memcached, d'un autre côté, s'installe de façon séparée en tant que service et peut être accédé depuis le réseau ce qui signifie que vous pouvez stocker les objets dans un unique endroit même s'ils proviennent de systèmes différents.

Notez que lorsque PHP s'exécute en tant qu'application (Fast)-CGI au sein de votre serveur, les processus PHP auront leur propre cache, c'est-à-dire que les données d'APCu ne seront pas partagées entre les différents processus. Dans ce cas, vous pourriez envisager d'utiliser memcached étant donné qu'il n'est pas lié aux processus PHP.

Dans une configuration réseau, APCu va généralement surpasser memcached en termes de rapidité d'accès, mais memcached sera capable d'être « scalable » plus rapidement et de façon plus poussée. Si vous ne vous attendez pas à avoir plusieurs serveurs pour gérer votre application, ou si vous ne souhaitez pas utiliser les fonctionnalités spécifiques de memcached alors APCu est probablement votre meilleur choix pour le cache d'objets.

Exemple utilisant APCu :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?php
// vérifie si la variable 'expensive_data' existe dans le cache
$data = apc_fetch('expensive_data');
if ($data === false) {
    // la donnée n'est pas en cache; enregistrer le résultat de l'appel d'une fonction longue pour plus tard
    apc_add('expensive_data', $data = get_expensive_data());
}

print_r($data;

Remarque : Avant PHP 5.5, l'APC fournit à la fois un cache d'objet et un cache pour le bytecode. l'APCu est un projet visant à apporter le cache d'objet à PHP 5.5+ depuis que PHP a un cache de bytecode intégré (OPcache).

En savoir plus sur les systèmes de cache objets les plus connus :


précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Josh Lockhart et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2017 Developpez.com.