Sonia Gazil Posté 18 Février 2006 Posté 18 Février 2006 Bonjour, D'après plusieurs bench, on voit que utiliser fread est plus rapide que file_get_contents. Et toujours en utilisant fread, il est plus rapide de faire : $fp = fopen ($filename, "r");$contents = fread ($fp, filesize ($filename));fclose ($fp); que de faire : $fp = fopen($filename, "r");$contents = '';while ( !feof($fp) ) { $contents .= fread($fp, 1024);}fclose($fp); Mais en terme d'utilisation ressources au niveau du serveur, y'a t'il une différence ? Car si mon fichier fait 1 000 000 octets, je suppose que la première méthode va charger d'un coup tous ces octets en mémoire. Même si cela est plus rapide, ça ne risque pas de surcharger le serveur ? Et quant est t'il pour la seconde ? Je me doute que ma question est assez fine, et je sais du tout si quelqu'un pourra me répondre clairement et avec certitude. Mais je vous remercie tout de même de m'avoir lu. Bonne soirée.
destroyedlolo Posté 19 Février 2006 Posté 19 Février 2006 A mon avis, la seconde solution est legerement plus lente car il devra allouer la memoire en plusieurs fois vu qu'il ne charge qu'1 ko a la fois. Avec la premiere solution, il pourrait tout allouer d'un coup. il y a du code PHP a interprete alors qu'avec la solution, tout se fait au niveau C Au niveau memoire, au final tout sera charge en memoire donc les 2 solutions auront le meme impacte sur le serveur.
Sonia Gazil Posté 19 Février 2006 Auteur Posté 19 Février 2006 Oui, car je stockais tout dans une variable. Mais imaginons que maintenant j'ai une fonction qui traite ma chaine. Une fois cette fonction executée, je n'ai plus besoin de concerver les données retournées par fread. $fp = fopen($filename, "r");$contents = '';while ( !feof($fp) ) { traitement_de_ma_chaine(fread($fp, 1024)); // A partir de maintenant, je n'ai plus besoin de ce que je viens de récupérer }fclose($fp); Mais la question est : ce que je viens de récupérer reste il en mémoire ? Comment le vérifier ? Comment savoir exactement la mémoire utilisée par un script php ?
dièse Posté 19 Février 2006 Posté 19 Février 2006 (modifié) Précisions sur la doc PHP file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance. Modifié 19 Février 2006 par dièse
destroyedlolo Posté 20 Février 2006 Posté 20 Février 2006 Oui, car je stockais tout dans une variable. Mais imaginons que maintenant j'ai une fonction qui traite ma chaine. Une fois cette fonction executée, je n'ai plus besoin de concerver les données retournées par fread. Ben, dans ce cas la, il est evident que la seconde solution utilisera moins la RAM. Ca peut etre un gains de temps et de statilite pour les gros fichiers. Mais la question est : ce que je viens de récupérer reste il en mémoire ? Comment le vérifier ? Comment savoir exactement la mémoire utilisée par un script php ? <{POST_SNAPBACK}> Si ton script peut etre lancer par le Shell (CLI), il suffit simplement d'utiliser un outils de profiling ... S'il ne peut etre lance que par un serveur web, il faut d'abord determine le nom du process HTTP qui execute le script, et ensuite le monitorer. C'est plus complique.
Sonia Gazil Posté 20 Février 2006 Auteur Posté 20 Février 2006 dièse : Oui mais, d'après mes derniers tests, file_get_contents est plus lent que fread. Mais justement, j'aurais aimé faire des tests au niveau de la mémoire utiliée. En effet, je me suis rendue compte que des fonctions affichaient de meilleures temps lors des tests effectués par un developpeur, seul face à sa machine. Mais, paradoxalement, elles sont beaucoup plus lentes lorsqu'elles sont appellées simultanément par plusieurs visiteurs... destroyedlolo : Je dois avouer que ma recherche sur la toile n'a pas été très fructueuse. Je développe sous windows XP, peux tu m'en dire davantage sur la marche à suivre pour connaitre la mémoire utilisée par un script ?
TheRec Posté 20 Février 2006 Posté 20 Février 2006 Bonjour, Voici un test des performances des fonctions évoquée dans ce sujet, à vous d'en tirer les conclusions qui s'imposent : http://www.phplibrairies.com/tutorial_2_pa...2fc4bf39b7e14b1 Personnellement j'aurais un net penchant pour écouter ce que les personne qui ont créé un langage lorsqu'il s'agit d'optimisation PS: Un complément, si tu regardes la première page de l'article mentionné ci-dessus, cela correspond à une requête sur un serveur distant.
petit-ourson Posté 20 Février 2006 Posté 20 Février 2006 Et si on lisait le fichier ainsi : <?php ob_start(); require("monfichieralire"); $contenu = string ob_get_contents(); ob_end_clean(); ?> Les includes et requires doivent être bien optimisés non ?
Sonia Gazil Posté 20 Février 2006 Auteur Posté 20 Février 2006 Bonjour, Voici un test des performances des fonctions évoquée dans ce sujet, à vous d'en tirer les conclusions qui s'imposent : http://www.phplibrairies.com/tutorial_2_pa...2fc4bf39b7e14b1 Personnellement j'aurais un net penchant pour écouter ce que les personne qui ont créé un langage lorsqu'il s'agit d'optimisation PS: Un complément, si tu regardes la première page de l'article mentionné ci-dessus, cela correspond à une requête sur un serveur distant. <{POST_SNAPBACK}> J'avais réalisé de nombreux tests, et la solution avec fopen et fread était la plus rapide. $fd = fopen ('bench_wd.php', 'r');$p = fread ($fd, filesize ('bench_wd.php'));fclose ($fd); Mais je souhaitais vérifier ce qu'il en était au niveau "mémoire" et "charge utilisée sur le serveur"
destroyedlolo Posté 21 Février 2006 Posté 21 Février 2006 destroyedlolo : Je dois avouer que ma recherche sur la toile n'a pas été très fructueuse. Je développe sous windows XP, peux tu m'en dire davantage sur la marche à suivre pour connaitre la mémoire utilisée par un script ? <{POST_SNAPBACK}> Desole, je n'utilise pas cet OS (chanceux que je suis ). Je laisse donc repondre les specialistes ...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant