2017-07-07 7 views
0

Après avoir fait des recherches, j'ai du mal à trouver une réponse définitive sur comment et si un fichier PHP include() est mis en cache.Est-ce qu'un fichier PHP include() local est mis en cache?

Le plus proche que j'ai trouvé est here mais cela n'a pas vraiment de sens pour moi. J'ai plusieurs méthodes qui utilisent d'autres méthodes de différents fichiers et je veux éviter de placer include() juste en haut du fichier mais je ne suis pas sûr de savoir comment cela pourrait affecter les performances.

Toute aide est appréciée.

Répondre

1

PHP est un langage interprété. L'exécution par défaut de PHP compile le code source PHP en une représentation intermédiaire appelée bytecode PHP qui est ensuite exécutée. Un cache de bytecode stocke cette représentation compilée de code source PHP dans la mémoire partagée. Cela élimine le besoin de charger et de compiler le code source sur chaque requête, ce qui entraîne une augmentation significative des performances (jusqu'à 70% de demandes en plus par seconde).

L'idée de base, lors de l'exécution d'un script PHP est en deux étapes:

  • Première: le code PHP, écrit en texte brut, est compilé opcodes
  • Puis: ces opcodes sont exécutés. Lorsque vous avez un script PHP, tant qu'il n'est pas modifié, les opcodes seront toujours les mêmes; donc, faire la phase de compilation chaque fois que le script doit être exécuté est une perte de temps CPU.

Pour éviter cette compilation redondante, il existe un mécanisme de mise en cache des codes opération que vous pouvez utiliser. Une fois que le script PHP a été compilé en opcodes, ceux-ci seront conservés en RAM - et utilisés directement de la mémoire la prochaine fois que le script doit être exécuté; empêcher la compilation d'être faite encore et encore.

Lire la suite

+0

Merci pour la réponse. En quoi cela concerne-t-il spécifiquement 'include()'. Si je 'include()' le même fichier dans plusieurs méthodes, il n'effectuera une fois le 'include()' qu'une seule fois, puis tirera le code compilé à partir de ce moment? –

+0

Le bytecode est mis en cache en mémoire, mais avec un index du nom de fichier; Vous avez toujours besoin du 'include' pour dire à PHP quel code inclure ... il verra alors si le bytecode pour ce fichier est dans le cache d'opcode, ou s'il doit récupérer le fichier du disque –

+0

Si vous écrivez OO code, et veulent éviter d'écrire toutes ces incudes, alors PHP fournit un autochargeur –