Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

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

<?php
set_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"

<?php
set_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
ADAM Benjamin 2008 | Admin