Maison > développement back-end > tutoriel php > Explication détaillée de l'utilisation du cache opcode en PHP

Explication détaillée de l'utilisation du cache opcode en PHP

php中世界最好的语言
Libérer: 2023-03-26 11:08:02
original
1613 Les gens l'ont consulté

Cette fois, je vais vous apporter une explication détaillée de l'utilisation du cache d'opcode en PHP. Quelles sont les précautions lors de l'utilisation du cache d'opcode en PHP. Voici un cas pratique, jetons un coup d'œil.

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, appelé opcode, opcode

2. Interpréteur et compilation La différence entre l'interprète

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 entre les 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 le API étendue, telle que parsekit_compile_<a href="http://www.php.cn/wiki/57.html" target="_blank">string</a>()parsekit_compile_<a href="http://www.php.cn/wiki/57.html" target="_blank">string</a>()

php -r "var_dump(parsekit_compile_string(&#39;print 1+1;&#39;));"
Copier après la connexion
5.opcode Le

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, on visualise le code source php

zend/zend_lingual_scanner.l dans le package on peut retrouver la marque correspondant à pirnt. Une fois que T_PRINT

a 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 Recherchez le code d'implémentation de cette 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

dans php.ini pour vérifier l'état du cache via
apc.cache_by_default = on
Copier après la connexion

,
<?php print_r(apc_cache_info());?>
Copier après la connexion

7. expiration du cache opcode

Le cache opcode expirera, s'il expire, il devra être généré à nouveau. Bien sûr, vous pouvez également ignorer le mécanisme de vérification de l'expiration et le définir dans php.ini

<🎜. >

De cette manière, les modifications du code du programme doivent prendre effet en redémarrant le serveur.

apc.stat=off
Copier après la connexion
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 afin de trouver le goulot d'étranglement d'exécution du programme, optimisant ainsi le programme.

Suivi de la fonction xdebug :

<p style="margin-bottom: 7px; margin-top: 14px;">xdebug.profiler_output_dir = /tmp/xdebug<br/>xdebug.profiler_output_name = cachegrind.out.%p</p>
Copier après la connexion

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

xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c
Copier après la connexion
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée de l'utilisation des nombres pairs et impairs et des variables en PHP


La mise en cache de Laravel ORM de Model :: find Explication détaillée de la méthode

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal