Comparaison include / require (once)

Eléphant du PHP | 209 Messages

09 avr. 2011, 23:45

Bonjour à tous,

J'ai lu sur le net que l'utilisation du "_once" était plus coûteux en temps et également que l'appel par include était plus rapide que par require.

Par curiosité, j'ai effectué des tests de mon côté et j'en arrive effectivement au fait qu'un include_once est plus lent qu'un include mais en aucun cas qu'un include est plus rapide qu'un require.

Je me demande donc si mes tests ne sont pas erronés...

Du coup, je voulais savoir si certains d'entre vous avaient déjà effectué des benchmarks entre ces fonctions, sur quelle version d'Apache et de PHP et à ce quels étaient les résultats des tests.

Pour ma part, j'ai utilisé Apache Benchmark et simulé l'inclusion de 2000 fichiers (existants) dans un fichier. J'ai appelé ce fichier 1000 fois en simulant la présence de 5 utilisateurs. J'obtiens les résultats suivants selon l'inclusion utilisée :
- require_once : 205.578 secondes
- include_once : 209.172 secondes
- require : 167.438 secondes
- include : 170.484 secondes

Chaque test est bien entendu fait indépendamment et dans les mêmes conditions (à peu de choses près).

Merci par avance de vos retours

devlop78
Invité n'ayant pas de compte PHPfrance

10 avr. 2011, 03:59

La question ne se pose pratiquement pas ...

Si tu codes à "l'ancienne", il te faut être sûr que le fichier appelé ne l'a pas déjà été ... donc un _once est obligatoire, ou alors tu dois gérer ça.
Si tu codes avec des classes, tu as donc au moins un loader, qui ne se lancera que si la classe n'a pas déjà été chargée ... Et si tu respectes un fichier = une classe, il n'y a pas de raison pour que ça rappelle le fichier ...

Ensuite, require et include ... C'est pareil ... Pas vraiment comparable. Si tu as plusieurs loaders, le require n'a pas de sens ... Si tu en as un seul, le require peut être utilisé, mais de toute façon, tu auras une erreur : soit ton require emet une erreur fatale, soit l'appel à une classe inexistante emet une erreur fatale ...

;)

Eléphant du PHP | 209 Messages

10 avr. 2011, 09:49

Je pose cette question uniquement par curiosité en fait :D

Je développe avec Zend Framework et utilise l'auto-loading afin de ne pas avoir à me soucier de ce genre de problématique :P

J'ai juste effectué ces tests car je trouvais assez étrange qu'un include soit plus lent qu'un require. J'ai vu des choses avoisinant les 40% d'écart #-o