Maison  >  Article  >  développement back-end  >  Introduction à l'utilisation du cache d'opcode en PHP

Introduction à l'utilisation du cache d'opcode en PHP

小云云
小云云original
2018-03-28 10:19:381283parcourir

Cet article présente principalement l'utilisation simple du cache d'opcode en PHP, et analyse le concept, le principe, l'ouverture simple et l'utilisation de l'opcode sous forme d'exemples. J'espère que cela pourra aider tout le monde.

L'exemple de cet article décrit l'utilisation simple du cache d'opcode en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1. Qu'est-ce que l'opcode

Une fois que l'interpréteur a analysé le code, il génère un code intermédiaire qui peut être exécuté directement, qui s'appelle un opcode, opcode

2. La différence entre un interpréteur et un compilateur

L'interpréteur génère le code intermédiaire et exécute directement le code intermédiaire. Le contrôle du runtime est toujours dans le. mains de l'interprète.

Le compilateur génère le code intermédiaire et optimise davantage le code pour générer un programme cible qui peut être exécuté directement, mais ne l'exécute pas. Il attend que l'utilisateur déclenche l'exécution. Son contrôle réside dans le programme cible. et n'a rien à voir avec le compilateur.

3.php est un langage interprété. Son principe est un peu similaire à la compilation, incluant l'analyse lexicale, l'analyse syntaxique, l'analyse sémantique..., le moteur de base de l'interpréteur php est le moteur zend<.>

4.php Comment afficher l'opcode d'un morceau de code

Installez l'extension parsekit de php, et vous pourrez afficher l'opcode de php via l'API étendue, telle que

parsekit_compile_string()


php -r "var_dump(parsekit_compile_string(&#39;print 1+1;&#39;));"
5. L'opcode est généré

Il doit d'abord subir une analyse lexicale. Le code du script peut être considéré comme une série de mots. combinaisons. L'interprète doit classer ces mots et Mark

Par exemple, print, on regarde

zend/zend_lingual_scanner.l dans le package source php. Dans ce fichier on peut trouver la marque correspondante. à imprimer. Une fois que T_PRINT

a trouvé la marque, l'étape suivante est l'analyse syntaxique. Dans

zend/zend_lingual_parser.y, on peut trouver la fonction correspondant à T_PRINT

puis dans zend. /zend_compile.c Trouver le code d'implémentation de cette fonction dans .Cette fonction implémente la conversion de l'opcode. Tous les opcodes sont représentés par des entiers utilisateur.

6. Activez la mise en cache des opcodes

La génération d'opcode nécessite une surcharge du système à chaque fois qu'un opcode est exécuté, cette surcharge est considérable, l'optimisation de PHP doit donc activer l'opcode. mise en cache. , pour éviter une compilation répétée.

Le cache d'opcode de PHP comprend APC, eAccelerator et XCache, qui placent tous l'opcode dans la mémoire partagée.

Prenons APC comme exemple : définissez


apc.cache_by_default = on
dans php.ini via


<?php print_r(apc_cache_info());?>
Vous pouvez vérifier l'état du cache,

7.expiration du cache opcode

Le cache opcode expirera s'il expire, il doit être généré à nouveau. Bien sûr, vous pouvez également. ignorez le contrôle d'expiration, définissez


apc.stat=off
dans php.ini pour que la modification du code du programme prenne effet en redémarrant le serveur.

8. Pour le suivi et l'analyse des scripts, vous pouvez utiliser xdebug pour suivre. Vous pouvez utiliser xdebug pour implémenter un suivi des performances, trouver le goulot d'étranglement d'exécution du programme et optimiser le programme.


xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_output_name = cachegrind.out.%p
Traçage de la fonction xdebug :


xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c
Vous pouvez utiliser wincachegrind pour afficher le rapport xdebug sous document de fenêtre.

Recommandations associées :

Compréhension approfondie de l'optimisation des opcodes en php (images et textes)

Le cache d'opcode rend php encore plus puissant

Opcodes (codes d'opération) pour comprendre les principes PHP_Tutoriel PHP


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn