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 Qu'est-ce qui est plus rapide des deux suivants? P>
ou même p>
@ code> erreur).
La forme est vraiment longue, puis j'ai besoin de vérifier plusieurs fois si les variables existent. P>
si (isset (article $)) code> li>
si ($ item_exists == true) code> li>
ul>
si ($ item_exists === true) code> li>
ul>
6 Réponses :
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 code> 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
=== code> ne devrait pas être nécessaire si
$ item_exists code> est toujours un booléen, mais cela ne fera pas de mal. Donc, selon votre situation, vous aurez peut-être besoin de p>
Merci pour votre réponse Pekka.
Il vaut mieux utiliser si (vide ($ item)) code> au lieu de ce code.
Dans ce cas, vous ne devriez pas poser des questions sur la performance, mais sur l'exactitude d'abord. Parce que isset code> ne se comporte pas comme une convertion booléenne et une comparaison à true em> (voir Table de comparaison de type ). Surtout les valeurs
tableau () code> (réseau vide),
false code>,
0 code>, et
"0" code> (
0 code> comme une chaîne) sont traités différemment. p>
+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.
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. P>
avec un afin que je puisse dire pour code> la répétition de 10000000 fois le même script a pris: p>
si (isset ($ item)) code> 2.25843787193 li>
si ($ item_exists == true) code> 6.25483512878 li>
si ($ item_exists === true) code> 5.99481105804 Li>
ul>
isset code> est sûrement plus rapide. P>
+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 B> La seule réponse de Pekka a du sens
Appréciez les tests! #Saluer
Il n'y a qu'un seul moyen d'optimiser votre code, appelé "profilage". Tout d'abord, vous devez savoir 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. P>
Je suggérerais les alternatives suivantes:
Vous pouvez avoir des problèmes avec
si ($ foo == true) code>, 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.