2009-07-11 10 views
4

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()

+0

Avez-vous essayé include() à la place? –

+0

n'est pas require() juste une version hard-fail de include()? – bob

+0

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 :) –

Répondre

3

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.

+0

faites-vous référence à apc.stat? – bob

+0

C'est apc.include_once_override –

0

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.

2

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 
1

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.

1

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.

Questions connexes