30 votes

PHP include (): taille du fichier et performances

Un inexpérimenté PHP question:

J'ai un fichier de script PHP que j'ai besoin d'inclure sur les différentes pages des tas de fois dans beaucoup d'endroits.

J'ai la possibilité de rompre le fichier inclus en plusieurs fichiers plus petits et de les inclure sur une base comme-nécessaire... OU ... je pouvais garder tout cela ensemble dans un seul fichier PHP.

Je me demandais si il n'y a aucun impact sur les performances de l'utilisation d'un plus grand vs petit fichier include() dans ce contexte? Par exemple, il n'existe aucune différence de performances entre une de 200 ko et le fichier 20KB fichier?

Je vous remercie.

35voto

Pascal MARTIN Points 195780

Il y aura une différence, entre 200 KO et un 20KB fichier... Mais vous n'aurez probablement pas le remarquer : un 200KO fichier n'est pas très grand, et on a généralement recours à un grand nombre de fichiers qui ne sont pas des "petits", lorsque vous êtes en train de bâtir une application.

Il y a deux choses qui prennent du temps, lorsque vous êtes en train de charger un .php le fichier :

  • Le code source PHP est "compilé" à "opcodes" -- c'est tout à fait équivalent à bytecode JAVA
    • Cela se fait à chaque fois qu'un fichier PHP est inclus par défaut
    • Mais, en utilisant une cache d'opcode comme APC, ces opérateurs peuvent être gardés en mémoire, et cette compilation de trucs à ne pas faire à chaque fois de plus -- ce qui est excellent : il va dire moins de CPU utilisé, comme la compilation ne sera pas fait plus (ça va être fait qu'une seule fois dans un certain temps).
  • Les opcodes sont exécutées
    • Selon ce que vous script contient, cela peut prendre un certain temps, ou pas :
    • Si le fichier ne contiennent des fonctions ou de définitions de classes, cela ne prendra pas beaucoup de temps : rien ne sera exécutée.
    • Si le fichier contient les instructions, ça va prendre plus de temps ^^


Comme un sidnote : dans une situation générale, vous gagnerez beaucoup plus de temps/cpu/ressources optimiser vos requêtes SQL, ou d'y ajouter un mécanisme de mise en cache, de penser à ce genre de choses.

11voto

James Butler Points 2772

Soyez prudent avec l' include_once() (et aussi require_once()), il est plus coûteux à gérer que d' include(). Chaque fois include_once() est exécuté, PHP fait une recherche sur un interne indice de déjà inclus les fichiers avant de décider de charger le fichier ou non. Le plus inclut dans l'index, le ralentissement de cette recherche est. Aussi lors de l'utilisation d' include() ou include_once() essayez d'utiliser des chemins absolus si possible car c'est beaucoup plus rapide que les chemins relatifs, car vous n'êtes pas forcer PHP à travailler sur le chemin absolu pour vous. Comme ggiroux dit, une certaine forme de mise en cache comme APC, vont récolter des récompenses énormes, et le rendu se soucier de la façon dont beaucoup comprennent des appels que vous avez pertinentes (en grande partie) (si vous n'avez mal écrit le code).

EDIT--

Se soucier de l'au-dessus des appels est un problème une fois que vous commencez à avoir plusieurs milliers d' requires ou includes dans votre base de code.

1voto

ggiroux Points 2971

Il y a certainement un impact, aussi assurez-vous d'utiliser include_once () au lieu de include (). Vous pourriez peut-être envisager d’utiliser APC qui dispose d’un cache d’inclusion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X