2010-03-10 2 views
15

Chaque page de mon site Web est rendue avec PHP.Combien y-a-t-il de PHP inclus?

Chaque fichier PHP utilise environ 10 includes. Ainsi, pour chaque page affichée, le serveur doit récupérer 10 fichiers, en plus du reste de ses fonctions (MySQL, etc.). Dois-je les combiner en un seul fichier d'inclusion? Cela fera-t-il TOUTE différence par rapport à la vitesse du monde réel? Ce n'est pas une tâche triviale car il y aurait un spaghetti de portée variable à trier.

Répondre

24

Les fichiers Include sont traités sur le serveur, de sorte qu'ils ne sont pas "récupérés" par le navigateur. La différence de performance d'utilisation par rapport à copier/coller le code ou la consolidation de fichiers est si négligeable (et je suppose que nous parlons dans la plage de 10   ms à 100   ms, qu'il n'est pas Ça vaut vraiment le coup.

Ne hésitez pas à include et require à votre coeur. Le code propre est sensiblement plus important que le rasage inférieur à 100   ms d'un chargement de page. Si vous construisez quelque chose où le timing est critique, vous ne devriez pas utiliser PHP de toute façon.

+0

Je pense qu'il est plus compliqué que cela, parce que cela dépend si les fichiers sont lus de la mémoire ou d'un disque. A partir du disque - cela peut prendre plusieurs ms, cela dépend si c'est fragmenté et la taille du fichier. (Le système d'exploitation peut mettre en cache le fichier, ou le périphérique HDD lui-même ..) – Dor

+3

@Pour ne pas sous-estimer les capacités du cache disque :) La fragmentation du disque n'affectera jamais votre site –

+0

Vous pouvez même réduire l'impact sur les performances en augmentant realpatch_cache_size si vous avez beaucoup de fichiers include. – gagarine

0

Bien que les opérations d'E/S disque parmi les plus grands mangeurs de performance, un site ordinaire ne remarquera aucun nombre raisonnable d'inclus. Avant de rencontrer des problèmes avec includes, vous auriez probablement déjà un cache d'opcode qui élimine également ce problème.

0

include\ and requires` seul fichier ouvert sur le côté serveur, mais qui pourrait être consumming de temps en fonction de si vous pouvez, le matériel/système de fichiers, etc.

Quoi qu'il en soit, utilisez autoloader. Seuls les fichiers nécessaires seront chargés de cette façon. Ensuite, si vous pensez que les fichiers inclus sont une source de ralentissement (et je pense qu'il y a beaucoup d'autres points à améliorer avant), vous pouvez essayer de fusionner automatiquement les fichiers. Vous avez toujours un fichier par classe lors du développement, mais vous pouvez construire un fichier qui contient la définition de chaque classe pour en avoir seulement un include (quelque chose comme cat <all your included file>.php > to_include.php).

3

Ce qui prend du temps consiste à déterminer où les fichiers se trouvent réellement dans le chemin d'inclusion. Si vous avez plusieurs emplacements dans votre chemin d'inclusion, PHP va rechercher chaque emplacement jusqu'à ce qu'il trouve le fichier ou échoue (auquel cas il renvoie une erreur). C'est pourquoi vous devriez placer le chemin d'inclusion où la plupart des fichiers inclus doivent être trouvés au-dessus du chemin d'inclusion. Si vous utilisez des chemins absolus dans votre chemin d'inclusion, PHP mettra en cache le chemin dans le cache du chemin réel, mais notez que cela devient très vite obsolète. Donc oui, y compris dix fichiers est potentiellement plus lent que d'inclure un gros fichier, tout simplement parce que PHP doit vérifier le chemin d'inclusion plus souvent. Cependant, à moins que votre serveur web soit une machine vraiment faible, dix fichiers ne sont pas suffisants pour avoir un impact. Cela ne devient intéressant que si vous incluez des centaines de fichiers ou si vous avez de nombreux emplacements à rechercher. Dans ce cas, vous devez utiliser un cache OpCode de toute façon. Notez également que lors de l'inclusion de fichiers, il est déconseillé d'inclure chaque fichier au début, car il se peut que vous incluiez des fichiers qui ne sont jamais appelés par votre application pour une requête spécifique.


Référence

Questions connexes