Question

Y a-t-il une différence de vitesse entre, disons:

$ newstring = "$ a et $ b sont allés voir $ c";

et

$ newstring = $ a. " et " . $ b. " est sorti pour voir " . $ c;

et si oui, pourquoi?

Était-ce utile?

La solution

En fonction de la version de PHP, la seconde est plus rapide si vous l'écrivez, par exemple: $ newstring = $ a. ' et ' . $ b. 'est sorti pour voir'. $ c;

PHP est très incohérent d'une version à l'autre et d'une construction à l'autre en matière de performances, vous devez le tester par vous-même. Ce qu'il faut dire, c'est que cela dépend également du type de $ a , $ b et $ c , comme vous pouvez le voir ci-dessous.

Lorsque vous utilisez " , PHP analyse la chaîne pour voir si des variables / espaces réservés sont utilisés à l'intérieur, mais si vous utilisez uniquement ', PHP les traite. comme une simple chaîne sans aucun traitement supplémentaire. Donc, généralement ' devrait être plus rapide. Au moins en théorie. En pratique, vous devez tester.

Résultats (en secondes):

a, b, c are integers:
all inside "     : 1.2370789051056
split up using " : 1.2362520694733
split up using ' : 1.2344131469727

a, b, c are strings:
all inside "     : 0.67671513557434
split up using " : 0.7719099521637
split up using ' : 0.78600907325745  <--- this is always the slowest in the group. PHP, 'nough said

Utilisation de ce code avec Zend Server CE PHP 5.3:

<?php

echo 'a, b, c are integers:<br />';
$a = $b = $c = 123;

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br /><br />a, b, c are strings:<br />';

$a = $b = $c = '123';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = "$a and $b went out to see $c";
$t = xdebug_time_index() - $t;
echo 'all inside " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . " and " . $b . " went out to see " . $c;
$t = xdebug_time_index() - $t;
echo 'split up using " : ', $t, '<br />';

$t = xdebug_time_index();
for($i = 1000000; $i > 0; $i--)
    $newstring = $a . ' and ' . $b . ' went out to see ' . $c;
$t = xdebug_time_index() - $t;
echo 'split up using \' : ', $t, '<br />';

?>

Autres conseils

Il y aura probablement une différence de vitesse, car ce sont deux syntaxes différentes. Ce que vous devez demander, c'est si la différence est importante. Dans ce cas, non, je ne pense pas que vous deviez vous inquiéter. La différence serait trop négligeable.

Je vous recommanderais de faire ce qui est le plus logique pour vous visuellement. " $ a et $ b sont allés voir $ c " peut être un peu déroutant quand on le regarde. Si vous souhaitez suivre cette voie, je suggérerais des accolades autour de vos variables: " {$ a} et {$ b} sont sortis pour voir {$ c} ".

J'ai fait un repère rapide et, comme d'autres l'ont dit, les résultats étaient très incohérents. Je n'ai remarqué aucun gain de performance en utilisant des guillemets simples au lieu de doubles. Je suppose que tout se résume à la préférence.

Vous pouvez vous en tenir à un type de citation pour votre style de codage et, le cas échéant, choisir des guillemets. La fonctionnalité de remplacement est plus pratique que vous ne le pensez.

Je mets le code de référence dans github .

Si vous êtes préoccupé par la rapidité des concaténations de chaînes à ce niveau, vous utilisez la mauvaise langue. Compilez une application en C pour ce cas d'utilisation et appelez-la dans votre script PHP, si cela vraiment est un goulot d'étranglement.

Oui, mais la différence est très négligeable entre

$newstring = "$a and $b went out to see $c";

et

$newstring = $a . " and " . $b . " went out to see " . $c;

Si vous avez utilisé:

$newstring = $a . ' and ' . $b . ' went out to see ' . $c;

La différence serait légèrement plus grande (mais probablement toujours négligeable), la raison en est, si je me souviens bien (je me trompe peut-être), que PHP analyse et analyse le contenu entre guillemets doubles pour les variables et les caractères spéciaux. caractères (\ t, \ n et ainsi de suite) et lorsqu’on utilise des guillemets simples, il n’analyse pas les variables ni les caractères spéciaux, ce qui peut entraîner une légère augmentation de la vitesse.

Pourquoi ne le testez-vous pas et ne comparez-vous pas la différence? Les chiffres ne mentent pas, si vous trouvez que l'un fonctionne mieux que l'autre, alors vous devriez demander pourquoi.

il n'y a pas de différence, période. ;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top