2014-04-17 1 views
-1

que je fais les microoptimizations de finition sur mon site et a remarqué que dans plusieurs de mes fichiers php qui sont appelés via AJAX, j'ai une variable _GET $ qui est utilisé plusieurs fois dans le fichier php:

<?php include 'connect.php'; 

$var = $_GET['x']; 

$var1 = $var . "..."; 
$var2 = $var . $var; 

$sql = mysqli_query($cxn, "SELECT user FROM login WHERE login_id = '$var'"); 

//etc. 

A ce point, ma pensée est que si le code a été réécrite comme:

<?php include 'connect.php'; 

$var1 = $_GET['x'] . "..."; 
$var2 = $_GET['x'] . $_GET['x']; 

$sql = mysqli_query($cxn, "SELECT user FROM login WHERE login_id = 
'".$_GET['x']."'"); 

//etc. 

ce, alors que l'équivalent de la production au premier bloc de code, serait en fait plus lent parce que le code doit _GET $ 4 fois SEPARÉES x ' contre une fois dans le premier bloc de code. La première est plus rapide car cette copie de $ _GET ['x'] est accédée et traitée plus rapidement. De même, j'imagine que cela s'appliquerait également aux fonctions php() et $ _POST comme les suivants:

$unixtime = time(); 

while ($row = mysqli_fetch_assoc($sql)) { 
$TimeVar = $unixtime; //Good....a copy of time() is used each time, so time is 
calculated only once 
} 

vs:

while ($row = mysqli_fetch_assoc($sql)) { 
$TimeVar = time(); //Bad....time() is recalculated for each iteration of the while loop 
} 

Alors, faites $ _GETs et _POSTs $ obtenir traitées séparément pour chaque exemple? Des fonctions telles que time()? Désolé pour les questions de niveau débutant ... espérons qu'il est OK :)

+0

Quelle est la question réelle? :) –

+1

Code 1 vs code 2 effectuera exactement la même chose. Vous n'avez pas à "obtenir" le tableau $ _GET chaque fois que vous l'utilisez. php traite la chaîne de requête avant que les scripts ne s'exécutent et elle existe comme toute autre variable après cela. –

+0

Désolé pour ça! Ajout de questions à la fin –

Répondre

0

$_GET, $_POST, $_SERVER, $_SESSION, etc. sont toutes les variables globales qui sont initialisés une fois au début du traitement du script. Peu importe si vous y accédez une fois, ou un million de fois, le temps nécessaire pour créer la variable sera le même.

Cela dit, attribuer une valeur à une variable donnée pourrait vous donner un peu d'une performance différence. La recherche de tableau de $_GET['x'], car il doit analyser la chaîne, aller à la structure de données, et tirer à partir de là, pourrait prendre un peu de temps. Cependant, l'assigner à une variable pourrait faire que le moteur utilise plus de mémoire (je ne sais pas si PHP copie-on-write ou pas), et peut-être faire plus de swap depuis le cache vers la mémoire et revenir variable. Cela dit, toute différence serait de l'ordre de dixièmes ou de centièmes de milliseconde à la charge de la page. Significativement moins que vous pourriez éventuellement mesurer, et beaucoup moins que la variation typique d'un chargement de page.

+0

Bonne réponse ... d'où je viens, c'est que si j'ai quelques milliers de cas de code "inefficace", cela ajouterait à une quantité non négligeable de temps .... pas une notion folle. Le meilleur exemple que je peux imaginer maintenant est si l'inefficacité est dans un temps ou foreach loop .... Imaginez si le bloc de code inefficace (utilisons votre numéro .... un dixième de milliseconde) est dans un 1000-itération pour chaque boucle. Ne devrait pas exécuter la boucle inefficient-code-bloc foreach (toutes choses étant égales par ailleurs) 1000 x 0.0001 secondes = 0.1 secondes plus lent? Dans mon esprit, ce n'est pas une quantité insignifiante de temps. –

+0

@ ChemBlob999: J'avais l'intention de dire que, au cours de milliers de changements de ce genre, vous pourriez faire une différence d'un centième de seconde, pas que vous en fassiez autant à chaque fois. Cependant, mon point principal est que ce genre de micro-optimisation ne vaut pas le temps. Vous * préférerez mieux vous concentrer sur des optimisations plus importantes et/ou mettre à niveau votre matériel. C'est là que vous commencez à voir des gains réels. – Tarka

Questions connexes