J'ai exécuté mon code via le profileur xdebug et j'ai vu que plus de 30% du temps était consacré aux appels require(). Quel est le meilleur moyen d'améliorer cela? J'ai vu quelques messages sur l'utilisation de __autoload, mais il y avait des déclarations contradictoires sur son impact sur APC (que nous utilisons), et des doutes sur son utilisation pour améliorer les performances.Performances PHP entravées par require()
Répondre
La raison pour laquelle un temps de consommation est requis est la vitesse d'E/S du disque. Vous pouvez essayer d'utiliser le chargement automatique, car vous pouvez avoir besoin de fichiers qui ne sont pas réellement utilisés. Une autre approche pour réduire l'overhead de disque d'E/S consiste à combiner vos fichiers PHP en un seul fichier volumineux. Exiger un gros fichier contenant le code dont vous avez toujours besoin est plus rapide que d'inclure le même code dans plusieurs petits fichiers.
En outre, APC dispose d'une fonction qui accélère nécessite apc.include_once_override que vous pouvez essayer d'activer.
faites-vous référence à apc.stat? – bob
C'est apc.include_once_override –
combien d'éléments sont inclus dans votre chemin d'accès? et l'ordre des emplacements est-il raisonnable pour votre application? Si vous utilisez des chemins relatifs, il vérifie les emplacements du chemin d'inclusion afin de rechercher un fichier correspondant.
Assurez-vous que votre inclusion utilise des chemins absolus plutôt que relatifs. Meilleure façon de le faire est de préfixer vos chemins avec
dirname(__FILE__) // for php < 5.3
__DIR__ // for php >= 5.3
Vous pouvez améliorer la vitesse de votre code en utilisant le compilateur PHP, comme http://eaccelerator.net/. Un tel compilateur accélère tout, y compris les fichiers.
APC et autoload ont eu quelques problèmes une fois. C'est il y a longtemps. En général, APC peut accélérer les instructions require
, car il met en cache les fichiers analysés. Par défaut, APC va toujours stat
le fichier pour voir s'il a changé sur le disque. Vous pouvez empêcher cela en utilisant des chemins absolus et en désactivant le paramètre apc.stat
. Notez que cela signifie que vous devez redémarrer le serveur pour effacer le cache.
- 1. aidez-moi à comprendre include/require en PHP
- 2. PHP error_log problèmes de performances
- 3. Amélioration des performances cURL (PHP Library)
- 4. de déclarations dans include et require fonctions
- 5. Performances WCF net.tcp par rapport à namedpipes
- 6. Performances LINQ
- 7. Performances de sérialisation Boost: texte par rapport au format binaire
- 8. `autoload` déclenche une erreur mais` require` ne fonctionne pas (ruby)
- 9. Comment activer ruby pour voir tk dans l'instruction require tk?
- 10. Quand utiliser `require`,` load` ou `autoload` dans Ruby?
- 11. Opérateurs imbriqués/require dans les requêtes de recherche Lucene
- 12. Pourquoi les modules n'honorent-ils pas toujours 'require' dans ruby?
- 13. Amélioration des performances WCF
- 14. performances Mysql et Count (*)
- 15. Problème d'utilisation require à l'intérieur d'une fonction et d'une portée variable
- 16. Comparaison des performances du sphinx: recherche de texte intégral par rapport à l'attribut
- 17. Performances LINQ2SQL avec transactions
- 18. Looping par mysql_fetch_array en PHP
- 19. PHP: STR remplacer par lien
- 20. Améliorations des performances C++ 0x
- 21. DBArtisan performances tweaks
- 22. Performances QtCreator sous Windows
- 23. Multiprocesseur et performances
- 24. list.sort performances IComparer
- 25. Ruby listbox hautes performances
- 26. Optimisation des performances, WebApplication
- 27. Variables d'application et performances?
- 28. MSXML2.XMLHTTP - performances Vista
- 29. Réglage des performances
- 30. Performances de compilation CSharpCodeProvider
Avez-vous essayé include() à la place? –
n'est pas require() juste une version hard-fail de include()? – bob
En théorie, oui. Je me demandais si cela pourrait avoir un impact énorme, donc la question dans un commentaire et non une réponse :) –