Maison  >  Article  >  développement back-end  >  Utilisation simple du cache d'opcode en PHP

Utilisation simple du cache d'opcode en PHP

不言
不言original
2018-03-29 15:57:131199parcourir

Cet article vous présente l'utilisation simple de la mise en cache des opcodes en PHP et le partage avec vous pour référence

1 Qu'est-ce que l'opcode

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

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

L'interpréteur exécute directement le code intermédiaire après l'avoir généré, et le runtime. le contrôle est toujours dans l’interprétation en main.

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('print 1+1;'));"

5. L'opcode généré

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

Par exemple, print, nous regardons zend/zend_lingual_scanner.l dans le package source php que nous pouvons trouver. la marque correspondant à l'impression. T_PRINT

Après avoir trouvé la marque, l'étape suivante est l'analyse syntaxique. Dans zend/zend_lingual_parser.y, nous pouvons trouver la fonction correspondant à T_PRINT

puis trouver le code d'implémentation de la fonction dans zend/. zend_compile.c , 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'un 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


Vous pouvez vérifier l'état du cache,

7. Le cache d'opcode expire

Le cache d'opcode expirera si c'est le cas. expire, Pour en générer un nouveau, bien sûr, vous pouvez également ignorer le mécanisme de vérification de l'expiration et définir

apc.stat=off

dans php.ini afin que le code du programme doive être modifié en redémarrant le serveur pour prendre effet.

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

La fonction trace de xdebug :

xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c

Vous pouvez utiliser wincachegrind pour afficher le fichier de rapport xdebug sous la fenêtre.

Recommandations associées :

Introduction à l'utilisation du cache d'opcode en 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