Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
Require ou include : Bench
Pour faire suite à l'article Require ou Include ?, voici le protocole de test qui m'a permis de mettre en évidence les performances de la solution "file_exists" par rapport à l'optimisation du "ou".Test de l'existence
<?phpset_time_limit(0);
function getmicrotime( $m )
{
list($usec, $sec) = explode(' ',$m);
return ((float)$usec + (float)$sec);
}
$x = 2;
$time_start = microtime();
for ($i=0; $i < 10000; $i++){
if( file_exists( $i.'include.php' ) ) require $i.'include.php';
else require 'include2.php';
}
$time_end = microtime();
echo (getmicrotime($time_end) - getmicrotime($time_start));
?>
Exploitation de l'optimisation du "ou"
<?phpset_time_limit(0);
function getmicrotime( $m )
{
list($usec, $sec) = explode(' ',$m);
return ((float)$usec + (float)$sec);
}
$x = 2;
$time_start = microtime();
for ($i=0; $i < 10000; $i++){
@include $i.'include.php' or require 'include2.php';
}
$time_end = microtime();
echo (getmicrotime($time_end) - getmicrotime($time_start));
?>
Vous remarquerez que j'ai ajouté le compteur dans le nom du fichier à inclure. J'ai été obligé de faire cela afin de ne pas être perturbé par le cache des statistiques.
Au premier lancement, vous constaterez que le "file_exists" est plus long, mais au deuxième lancement, il est plus rapide. C'est à nouveau le cache des statistiques qui a été conservé d'une exécution à l'autre et ce qui est assez représentatif d'une utilisation normale.
Je n'ai pas plongé dans le code, mais je suppose que l'inclusion utilise en interne une forme de "file_exists" et le fait de l'appliquer avant lui fait gagner du temps. D'où également la double erreur générée en cas d'absence du fichier à inclure.
Par Frédéric Bouchery
