|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Bonjour à tous.
Les grinds de Xdebug ont montré une large faiblesse de performances de la fonction file_exists que depuis je n'utilise pratiquement plus pour le chargement de fichier PHP, je préfère leur substituer cette forme: au lieu de Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#2 |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Bonjour,
En termes de perfs, je n'ai pas testé. Mais je ne pense pas que ce soit une bonne pratique de désactiver les erreurs. Ca ouvre la porte aux bugs, non ? Comment gérer l'absence du fichier ?
__________________
|
|
|
00
|
|
|
#3 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
La directive include renvoie un booléen
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : février 2009 Messages : 150 ![]() |
Salut,
Il me semble que is_file est plus rapide que file_exists. Par contre utiliser @ ralentira malheureusement ton script... |
|
|
00
|
|
|
#5 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Citation:
La seule solution reste de benchmarquer les différentes possibilités. C'est parti !
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#6 | ||||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Bon voici un premier jet:
PHP 5.2 Code :
Code :
Ces résultats sont à prendre avec des pincettes, certaines fonctions comme file_exists utilisent un cache pour améliorer les performances. A noter tout de même qu'on remarque une très nette amélioration des performances avec is_file (jusqu'a x10) et que le fait de désactiver les erreurs ne joue pas (ou peu) sur la directive include. Le code des scenarios: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||||
|
00
|
|
|
#7 |
![]() ![]() Josselin Développeur Web Inscription : janvier 2004 Messages : 9 050 ![]() |
J'avais déjà fait le test de performance entre file_exits() et @include() il y a quelques temps (on a d'ailleurs développé une page spéciale pour faire des benchs là où je bosse), et je ne trouve bizarrement pas les même résultats que toi :
![]() C'est sans compter le cache de la fonction file_exists(), donc si on utilise clearstatcache() avant chaque appel, pour tester les performances réelles, on voit que la fonction file_exits() est encore moins performante. |
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : février 2009 Messages : 150 ![]() |
Alors ça... c'est du sacré bench
Nous manque juste un petit avec php4, et c'est peu etre d'ailleurs sous php4 que le @ fait chutter. Sympa le gain is_file en php5 ! je suis pas sur qu'il soit aussi énorme en 4. |
|
|
00
|
|
|
#9 | ||
|
Membre actif
![]() Inscription : février 2009 Messages : 150 ![]() |
Tu obtiens quoi Bisûnûrs avec ce test :
Code :
Le fichier txt est bien présent ? |
||
|
|
00
|
|
|
#10 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Je précise que j'ai effectué mes tests sans clearstatcache() sur une machine windows (Intel Core 2 Duo à 2.26ghz) et avec un fichier existant.
Tu remarquera par ailleurs que mes tests sont sensiblement différents de ceux que tu as effectué car les miens ne servent qu'a tester atomiquement la reconnaissance d'un fichier. Ce qui m'intéresse c'est surtout de savoir quelle est la meilleure option pour détecter la présence ou non d'un fichier.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#11 | |||
![]() ![]() Josselin Développeur Web Inscription : janvier 2004 Messages : 9 050 ![]() |
Citation:
![]() (code 1 = include, code 2 = is_file) Version fichier existant : ![]() (code 1 = include, code 2 = is_file) Dans le premier message, c'était avec un fichier inexistant. Sinon, c'est : - PHP 5.3.2 ; - Intel(R) Xeon(R) CPU W3520 @ 2.67GHz, 8 cores ; - 12Go de RAM Le problème c'est que même si l'include te renvoie la valeur que tu souhaites, les fichier est inclus quoi qu'il arrive. |
|||
|
|
00
|
|
|
#12 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Citation:
Quand j'ai constaté dans mes grinds que l'Autoloader prennait entre 15% et 25% du temps d'execution total, j'ai pris peur... En tout cas merci bisunurs d'avoir effectué ces benchmarks, ça me permet de répondre à ma question PS: Ton outil de benchmark est disponible quelque part sur la toile ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#13 | |
![]() ![]() Développeur Web Inscription : août 2006 Messages : 2 700 ![]() |
Citation:
Il faudrait tester les enchainements test_d_existence+inclusion.
__________________
|
|
|
|
00
|
|
|
#14 | |||
![]() ![]() Josselin Développeur Web Inscription : janvier 2004 Messages : 9 050 ![]() |
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#15 |
|
Membre actif
![]() Inscription : février 2009 Messages : 150 ![]() |
J'ai fait le test sur php 4.3 et c'est un peu du genre les votres, sauf pour le gain is_file vs file_exists tres petit...
A : is_file B : file_exists C : if(is_file(./test.php)) { include(./test.php); } D : if(@include(./test.php))!==false) {} E : @include F : include A: 0.00184 s B: 0.00157 s C: 0.34811 s D: 0.36105 s E: 0.39377 s F: 0.28415 s A: 0.00157 s B: 0.00193 s C: 0.39129 s D: 0.29325 s E: 0.33588 s F: 0.36853 s A: 0.00156 s B: 0.00196 s C: 0.37584 s D: 0.31348 s E: 0.27019 s F: 0.35940 s A: 0.00159 s B: 0.00160 s C: 0.29865 s D: 0.35581 s E: 0.34903 s F: 0.38550 s A: 0.00157 s B: 0.00162 s C: 0.35654 s D: 0.30475 s E: 0.37011 s F: 0.27952 s (un peu préhistorique, mais fiable, machine un peu sollicité Au final, is_file, c'est bien juste pour tester l'existence, mais ça sers "a rien" si tu compte inclure ce fichier. Sinon le coup du @include est pas si mal en fait (surtout php5)Je pense que ton "probleme" de tps d'execution viens de autre chose que ces includes... A quoi servent ces tests include ? il y en a beaucoup ? |
|
|
00
|
|
|
#16 | |||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Citation:
Citation:
Citation:
Bon on gagnera sûrement du temps en vous proposant de tester cette librairie par vous-même: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||||
|
00
|
|
|
#17 |
![]() ![]() Inscription : septembre 2010 Messages : 7 123 ![]() |
utilise spl_autoload (et spl_autoload_extensions pour géré ton extension)
edit : d'ailleurs vus que les classes sont seules, pas besion de faire ton autoload custom, c'est déjà résolu avec le path
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#18 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Effectivement c'est une solution. En revanche je perd la possibilité d'arrêter l'autoloader mais c'est pas tellement utile de toute façon.
Il faudra alors que je remplace tous les appels Autoloader::load($c) par des class_exists (à ma connaissance y'en a qu'un: au moment de la sélection du contrôleur). Est-ce qu'il y a un gain de perfs à la clé ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#19 |
![]() ![]() Inscription : septembre 2010 Messages : 7 123 ![]() |
t'as pas besoin de charger les classes avec Autoloader::load, si la classe n'existe pas l'autoloader va la chargé comme un grand
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#20 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 988 ![]() |
Dans le cas cité plus haut, il s'agit de valider l'existence ou non d'une classe, j'aurais dû le préciser.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
Copyright © 2000-2012 - www.developpez.com