2009-05-19 6 views
2

Je m'interrogeais sur la mise en cache de pages PHP dynamiques. S'agit-il vraiment de pré-compiler le code PHP et de le stocker en byte-code? Quelque chose de similaire à .pyc de Python qui est une version plus compilée et prête à être exécutée. Ainsi, si le système voit que le fichier .pyc est plus récent que le fichier .py, il ne prendra pas la peine de recompiler le fichier .py .Quelqu'un peut-il expliquer un peu sur la mise en cache des pages PHP dynamiques?

La mise en cache de PHP est-elle principalement à ce sujet? Quelqu'un peut-il offrir un peu plus d'informations à ce sujet?

Répondre

3

Dépend du type de mise en cache dont vous parlez. La mise en cache Opcode fait exactement ce que vous dites. Il prend l'opcode et le met en cache de sorte que chaque fois qu'un utilisateur visite une page particulière, cette page n'a pas besoin d'être recompilée si son opcode est déjà compilé et dans le cache. Si vous modifiez un fichier php, le mécanisme de mise en cache le détectera et recompilera le code et le placera dans le cache.

Si vous parlez de mettre en cache les données sur la page elle-même, c'est quelque chose de complètement différent.

Jetez un oeil à la Alternative PHP Cache pour plus d'informations sur la mise en cache des opcode.

+0

donc si je lance un programme PHP sur mon Invite de commandes, puis-je demander qu'une version pré-compilée soit générée aussi la prochaine fois qu'elle n'aura pas besoin de compiler? –

+0

qu'est-ce que "mettre en cache les données sur la page elle-même" n'est pas la dynamique du contenu de la page PHP? alors comment le contenu dynamique peut-il être mis en cache? –

+0

Vous devez configurer un accélérateur PHP spécifique pour mettre en cache ce que vous utilisez. Mais essentiellement, oui, c'est possible.Voir la documentation de l'accélérateur pour plus de détails sur comment. –

2

Ce que vous décrivez est un PHP accelerator et ils font exactement ce que vous avez dit; stocke le bytecode compilé mis en cache afin que plusieurs exécutions du même script nécessitent une seule compilation.

Il est également possible de mettre en cache les résultats de l'exécution du script PHP. Cela nécessite généralement au moins un peu de logique, car le contenu de la page a peut-être changé depuis sa mise en cache. Par exemple, vous pouvez jeter un oeil à la general cache feature provided by CodeIgniter.

0

Il existe actuellement différentes formes de mise en cache. Ce dont vous parlez est géré par des paquets tels que eAccelerator, MMCache, etc.

Alors que cela vous aidera, vous pourrez vraiment améliorer vos performances en mettant en cache la sortie HTML, le cas échéant, ou en cache DB ensembles de résultats pour les requêtes répétitives (quelque chose comme memcache).

L'installation de l'un des mécanismes de cache d'opcode est très facile, mais les deux autres domaines de mise en cache que j'ai référencés vous apporteront des avantages de performances beaucoup plus importants.

1

Peter D's answer couvre bien la mise en cache de l'opcode. Cela peut vous faire économiser plus de 50% du temps de génération de la page (subjective) si vos pages sont simples!

L'autre mise en cache que vous voulez savoir est la mise en cache des données. Cela peut être la mise en cache d'ensembles de résultats de base de données, une réponse de service Web, des morceaux de HTML ou même des pages entières!

Un simple 'exemple' doit illustrer:

$cache = new Cache(); 
    $dataset; 

    if (!$dataset == $cache->get('expensiveDataset')){ 

     //run code to fetch dataset from database 
     $dataset = expensiveOperation(); 
     $cache->set('expensiveDataset', $dataset); 

    } 
echo $dataset; //do something with the data 

Il existe des bibliothèques pour aider avec l'objet, la fonction et la mise en cache de niveau de la page. Zend Framework's Zend_Cache composant est matière à réflexion et une excellente mise en œuvre si vous aimez ce que vous voyez.

Questions connexes