11
votes

PHP Vitesse: Qu'est-ce qui est plus rapide? Si (Isset ($ FOO)) ou si ($ foo == true)

J'essaie simplement d'optimiser mon code. J'ai besoin de préremplir un formulaire avec des données à partir d'une base de données et je dois vérifier si la variable existe pour remplir la zone de texte (je n'aime pas l'erreur @ erreur). La forme est vraiment longue, puis j'ai besoin de vérifier plusieurs fois si les variables existent.

Qu'est-ce qui est plus rapide des deux suivants?

  • si (isset (article $))
  • si ($ item_exists == true)

    ou même

    • si ($ item_exists === true)

2 commentaires

Vous pouvez avoir des problèmes avec si ($ foo == true) , que si $ foo est zéro et qui est valide?


La pénalité de performance pour l'affaire == et === est, une erreur e_notice est lancée car la variable n'existe pas. Les erreurs de lancer sont relativement chères. Lorsque vous appelez Isset (), aucune erreur n'est lancée si la variable n'existe pas.


6 Réponses :


7
votes

Je suis sûr qu'il y a une différence de performance; Je suis sûr que cela a été aspiré quelque part; Mais je suis également sûr que cela n'a pas d'importance du tout à des fins réelles. Tout gain réalisable est dans les millisecondes ici, et ce qui est beaucoup plus important est la lisibilité du code et l'évitement des avertissements (dont la performance des coûts, qu'elle soit la production ou non).

Vous aurez probablement besoin isset si vous ne pouvez pas être sûr qu'il est défini au moment où vous y accédez. Comparaison de type coffre-fort === ne devrait pas être nécessaire si $ item_exists est toujours un booléen, mais cela ne fera pas de mal. Donc, selon votre situation, vous aurez peut-être besoin de xxx


2 commentaires

Merci pour votre réponse Pekka.


Il vaut mieux utiliser si (vide ($ item)) au lieu de ce code.



11
votes

Dans ce cas, vous ne devriez pas poser des questions sur la performance, mais sur l'exactitude d'abord. Parce que isset ne se comporte pas comme une convertion booléenne et une comparaison à true (voir Table de comparaison de type ). Surtout les valeurs "" (chaîne vide), tableau () (réseau vide), false , 0 , et "0" ( 0 comme une chaîne) sont traités différemment.


1 commentaires

+1. En plus de la différence de comparaison Les tableaux, l'utilisation d'un opérateur de comparaison sur une variable non déclarée entraîne un e_notice.



1
votes

Répondez cependant, probablement émetteurs () et "===" seront les plus rapides car ils recherchent uniquement une condition, où == vérifie pour plusieurs conditions et être plus lent. Je n'ai pas eu officiellement testé cela, mais je pense que c'est bien. @Pekka est également correct si vous cherchez à optimiser, ils ne seront vraiment pas là où vous le faites. Comme il s'agirait probablement de milliers d'appels juste pour remarquer quelques millisecondes de différence.


0 commentaires

30
votes

avec un pour la répétition de 10000000 fois le même script a pris:

  • si (isset ($ item)) 2.25843787193
  • si ($ item_exists == true) 6.25483512878
  • si ($ item_exists === true) 5.99481105804

    afin que je puisse dire isset est sûrement plus rapide.


5 commentaires

+1 pour faire l'analyse comparative. Il montre également que cela ne fait aucune différence réelle - il est extrêmement rare qu'un script PHP fasse quelque chose de 10 millions de fois, et généralement, la base de données de base de données / fichier d'E / S augmenterait massivement le temps nécessaire.


Qu'est-ce que $ item_exists? Je pense que le "==" pourrait varier en fonction de son type


Pour ajouter au jeu chiffres: Toute seule façon est de l'ordre de 0,0000001 secondes. Ce qui signifie que vous devriez le faire environ 1 000 000 fois par page pour être quelque chose que l'utilisateur remarquerait (jusqu'à 0,1 seconde correspond à ce que l'utilisateur remarquerait). En bref, le type de micro-optimisation qui sera rarement, si jamais, faire une différence.


C'est une question liée au rendement awhul et une réponse affreuse de telles choses sans communication avec une optimisation La seule réponse de Pekka a du sens


Appréciez les tests! #Saluer



-2
votes

Il n'y a qu'un seul moyen d'optimiser votre code, appelé "profilage". Tout d'abord, vous devez savoir quelle partie de code nécessite une optimisation. Et seulement ensuite exécutez des tests, trouvez des solutions, etc.

L'approche "Circling" de la réponse de Marcx est terrible aussi. Si vous souhaitez tester si un code fait une réelle différence, testez-le du point de vue du navigateur, à l'aide du Apache utilitaire de référence.


0 commentaires

-1
votes

Je suggérerais les alternatives suivantes: xxx


0 commentaires