Quelles sont certaines des opérations les plus chères chez PHP? Je sais que des choses comme la dépassement de l'opérateur @ peuvent être chères. Que pensez-vous d'autre? P>
10 Réponses :
Tout ce qui va bien qu'une connexion réseau - comme appeler un service Web, par exemple: elle prendra généralement plus de temps que de faire une opération localement. P>
(même si cela ne coûte pas beaucoup de processeur, cela coûtera du temps) em> p>
Si cela n'est pas évident pour tout le monde que je ne sais pas ce qui est
Bien que je pense que c'est vrai, aussi, de JS et d'autres langues, donc presque certainement de ma faute. = / p> foreach () code> Les déclarations, en particulier avec la nidification, sont fréquemment chères; Toutefois, c'est autant que mon naïf-et parfois mal planifié - approche de la programmation de la faute de PHP. P>
Ce n'est pas nécessairement la foreach elle-même qui est lente, mais plutôt la logique au sein du forach. Meilleure pratique Il y aurait de boucler sur les données une fois et une seule fois, dans la mesure du possible, et de traiter comme peu de traitement à l'intérieur d'une boucle de foresach possible, car cette boucle sera exécutée 1-Infinity Times, en fonction de la taille de l'ensemble que vous avez sont itérients sur.
'Hello ' . $name
+1, je n'ai jamais su que "hello $ nom" code> était plus lent que "bonjour". $ nom code> =)
PHP String Interpolation n'est pas ce que j'appellerais "l'une des opérations les plus chères en PHP". C'est très vite. Oui, vous avez raison: l'exemple d'interpolation ci-dessus est de 20% ou 25% plus lentement par rapport à l'exemple de la concaténation, mais cela n'implique pas que l'interpolation est une traînée majeure.
ni faire "@" ou quoi que ce soit d'autre. Arrêtez de craindre les caractéristiques, craignez votre mauvais code
@valya j'apprécie où vous venez de ce que vous venez, mais ce n'est pas un commentaire utile. Je suis d'accord avec vous, mais dans le même temps, j'essaie d'obtenir une liste de gotchas que les gens devraient rechercher lors de la rédaction de PHP. Faisons face contre elle, PHP est géniale mais ne vous laissera pas seulement vous pendre, mais cela l'encouragera activement.
Et si vous vous souciez tellement, vous pouvez utiliser des structures optimisées de SPL - Great Point!
Je dirais des requêtes SQL à l'intérieur des boucles. Telle que ceci: lequel, pour l'enregistrement, pourrait être raccourci dans quelque chose comme ceci: p>
Je pense que le deuxième exemple serait légèrement / plus / cher, car il y a une instruction d'affectation.
Oh oui? Alors c'est quoi? La question est "Quelle est la matière la plus chère chez PHP" et la réponse est "tout ce que vous avez mis à l'intérieur d'une boucle qui n'appartient pas là." Mais vous avez raison, il est tellement plus important de prendre soin de ces citations simples pesky!
@JOSH Je pense avec votre exemple, la meilleure solution serait de déplacer la requête $ DB-> () en dehors de l'évaluation de Foreach. Donc: $ résultat = $ DB-> requête ("Sélectionner foo de la barre"); foreach ($ résultat comme $ rangée) ... code>
Strictement parler, ce n'est pas un goulot d'étranglement PHP, non, mais c'est quelque chose que vous êtes susceptible de rencontrer du code PHP.
plutôt que d'essayer de comprendre les zones potentielles lentes, utilisez un outil de profilage. Installation xdebug était probablement l'une des choses les plus faciles et les meilleures que j'ai faites pour améliorer le code que j'écris. Installez avec WinCachegrind (ou la version correcte pour votre système d'exploitation) pour de meilleurs résultats. P>
D'accord. Je pense juste à des choses que l'on pourrait vouloir s'engager dans la mémoire musculaire afin d'éviter automatiquement. À mon esprit, le profilage est préférable à vous montrer des goulots d'étranglement que vous n'étiez pas autrement conscient de.
Oui - grand point. Si vous utilisez un cadre, vous aurez tendance à constater que la plupart du temps est dépensé dans ce cadre - et souvent - pas un endroit où vous pourrez vraiment optimiser. Quelque chose comme APC peut faire des merveilles (ou tout cache OPCODE pour cette affaire). En outre, Wincachegrind est assez ancienne, Checkout KCachegrind for Ubuntu (j'ai dirigé une machine virtuelle pour un seul outil).
Certaines micro-optimisations qui sont bonnes pratiques, mais ne feront pas beaucoup de différence pour vos performances de la ligne de fin: P>
echo 'Comment allez-vous', NOM $, "Je vais bien", $ var1 code> est plus rapide que echo 'Comment allez-vous ". Je vais bien '. $ Var1 code> li>
- se développer avec des avis et des avertissements allumé. S'assurer qu'ils ne sont pas déclenchés sauve la php d'avoir à exécuter un contrôle d'erreur sur eux. Li>
ul>
Exactement le genre de réponse que je cherche. Merci @zombat !!
Dans mon expérience, cloner un objet est moins cher que l'instanciation d'un nouveau.
De ma propre expérience L'opération la plus coûteuse en termes réels est la déclaration Code peut également obtenir une augmentation de la performance X10 en refactant simplement vos algorithmes et ses structures de données. Obtenez n'importe quel programme et essayez de la moitié de sa longueur, pouvez-vous encore la moitié? P> echo code>. Essayez de rejoindre toutes les chaînes ensemble avant de les sortir sur le navigateur, suivi des appels de base de données, en particulier des joints! P>
Donc, vous voulez dire attribuer tout ce que vous allez écho à une variable puis écho cette variable quand elle est prête?
Pensez-y comme cette darrell: echo "Text1" echo "Text2" Echo "Text3" est lent que echo "Text1 + Text2 + Text3" Il est également vrai dans des langues comme Java et C # dans laquelle vous produisez une bande de déclarations à la console. .
curl_exec () est très lent, comparé aux opérations typiques. En outre, la plupart des opérations Str_ * sont plus rapides que les opérations de regex. P>
Les gens pensent que @ coûte cher, peut-être que ce disant est assez vaste étendu sur le Web. P>
citant de: http://www.php.net /manual/fr/language.operators.errorcontrol.php#102543 p>
Si vous vous demandez quel impact sur la performance de l'utilisation de @ L'opérateur est, considérez cet exemple. Ici, le deuxième script (en utilisant L'opérateur @) prend 1,75x aussi longtemps pour exécuter ... presque le double de la temps du premier script. p>
Alors, alors que oui, il y a des frais généraux, par itération, nous voyons que le @ L'opérateur a ajouté seulement .005 ms par appel. Pas assez de raison, imho, à Évitez d'utiliser l'opérateur @. p>
REAL 0M7.617S UTILISATEUR 0M6.788S SYS 0M0.792S P>
vs p>
REAL 0M13.3333S UTILISATEUR 0M12.437S SYS 0M0.836S P> blockQuote>
Vous pouvez presque incapable de "dépasser" un opérateur et cela vaut souvent la peine si cela fait une opération souhaitée. P>
Uniqid () code> est stupide cher. N'utilisez pas pour générer de nombreux identifiants uniques. P>
Pourquoi essayez-vous d'attraper ces minuscules problèmes de performance? Si votre programme est lent, ce n'est pas à cause de @
Le "10 $ PayPal $ à Paul Tomblin" est assez cher. Mais totalement la peine.
@valya J'essaie d'avoir un sens des différentes choses à éviter où la performance est concernée. Je n'utilise que l'opérateur @ comme exemple.