2009-06-03 4 views
3

En supposant que la version PHP> = 5.2, ce qui est une meilleure solution pour la gestion comprend:Quel est le meilleur: require_once? ou if (! defined ('FOOBAR')) exigent? ou quelque chose d'entièrement différent?

require_once DEFPATH . 'config.inc.php'; 

ou

if (!defined('FOOBAR')) require DEFPATH . 'config.inc.php'; 

ou tout autre chose?

Le site n'utilise pas de contrôleur frontal ou d'autochargeur. Le nombre typique de fichiers à inclure est de 3 à 8.

J'ai entendu, ici et ailleurs, que require_once ajoute une surcharge et ne fonctionne pas bien avec la mise en cache. Mais j'ai également entendu dire qu'un petit nombre d'instructions require_once est OK dans la pratique dans les versions ultérieures de PHP.

Il doit également y avoir un surcoût associé à la vérification si quelque chose est défini, mais cela peut être moins un problème.

En général, quelle est la meilleure pratique et pourquoi?

Répondre

3

Oui, require_once() est livré avec un processeur et un surcoût de mémoire, mais pas significatif pour les performances. En fait, c'est une opération très efficace parce que PHP fait juste une recherche de hashtable pour décider si ce fichier a déjà été analysé ou non. Ne vous donnez pas de maux de tête inutiles avec des hacks comme votre exemple défini ('FOOBAR'), car il ne fait la même chose qu'avec moins d'élégance.

Ce qui prend du temps lors d'une requête PHP est la recherche de chemin de fichier, puis l'étape suivante d'analyse. La quantité de ressources nécessaires à l'exécution pour déterminer si vous avez déjà analysé le fichier est négligeable.

Il y a quelques choses que vous pouvez faire pour faire fonctionner votre demande plus rapidement:

  • éviter le chemin de recherche unecessarily longtemps dans include() et require()
  • utilisation absolue comprennent les chemins étaient possibles
  • inclure des choses uniquement au besoin
  • cache de gros fragments de sortie
  • requête complexe cache
  • résultats
  • écrire laconique co de, délester la fonctionnalité rarement utilisée pour les fichiers source inclus sur demande

Si vous utilisez un cache de code ou une sorte de optimiseur d'exécution, lisez le manuel - ils ont des stratégies différentes qui peuvent réellement nuire à la performance ou introduire des bogues en fonction de votre code.

Un dernier conseil: attention à l'optimisation prématurée! Les demandes prenant entre 0 et 50 millisecondes sur le serveur ne sont pratiquement pas identifiables du côté de l'utilisateur.

2

J'utiliserai require_once dans votre cas. Même si cela ajoute un surcoût, vous pouvez le négliger, surtout lorsque vous ne devez inclure que 8 fichiers au maximum. Le require_once est beaucoup moins sujette aux erreurs et plus 'clean' ...

0

Dans votre exemple, vérifier si FOOBAR est défini serait mieux. Mais c'est parce que votre exemple ne spécifie pas un chemin complet vers le fichier include.

Vous devez toujours spécifier le chemin complet pour à peu près tout, sauf si vous souhaitez spécifiquement utiliser un chemin relatif. Sinon PHP doit rechercher dans les différents répertoires de chemin de recherche pour votre fichier. S'il se trouve dans le dernier répertoire du chemin de recherche, c'est un peu de surcharge.

Je crée toujours un tableau contenant le chemin d'accès complet aux répertoires dans lesquels je charge les fichiers, puis j'ajoute le chemin approprié au fichier que je charge.

+0

@ brent-baisley Je vais apporter une modification à la question pour plus de clarté, en indiquant l'utilisation d'un chemin défini. Votre réponse est-elle toujours valable si c'est le cas? Merci. – PartialOrder

Questions connexes