Pregunta

¿Hay una diferencia de velocidad entre, digamos:

$ newstring = " $ a y $ b salieron a ver $ c " ;;

y

$ newstring = $ a. " y " . $ b. " salí a ver " . $ c;

y si es así, ¿por qué?

¿Fue útil?

Solución

Dependiendo de la versión de PHP, varía según cuánto sea más rápido el segundo si lo escribe así: $ newstring = $ a. 'y'. $ b. 'Salí a ver'. $ c;

PHP es muy inconsistente de versión a versión y de compilación a compilación cuando se trata de rendimiento, debe probarlo usted mismo. Lo que hay que decir es que también depende del tipo de $ a , $ b y $ c , como puede ver a continuación.

Cuando usa " , PHP analiza la cadena para ver si hay alguna variable / marcador de posición dentro de ella, pero si usa solo ' PHP la trata como una cadena simple sin más procesamiento. Por lo tanto, generalmente ' debería ser más rápido. Al menos en teoría. En la práctica, debe probar.


Resultados (en segundos):

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

Uso de este código con 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 />';

?>

Otros consejos

Probablemente habrá una diferencia de velocidad, ya que son dos sintaxis diferentes. Lo que debe preguntar es si la diferencia es importante. En este caso, no, no creo que deba preocuparse. La diferencia sería demasiado insignificante.

Te recomendaría que hagas lo que tenga más sentido visualmente. " $ a y $ b salieron a ver $ c " puede ser un poco confuso al mirarlo. Si quisieras seguir esa ruta, te sugeriría llaves entre tus variables: " {$ a} y {$ b} salieron a ver {$ c} ".

Hice un punto de referencia rápido y, como han dicho otros, los resultados fueron muy inconsistentes. No noté ningún aumento en el rendimiento usando comillas simples en lugar de dobles. Supongo que todo se reduce a preferencias.

Es posible que desee apegarse a un tipo de cita para su estilo de codificación, y si lo hace, elija comillas dobles. La función de reemplazo es útil más a menudo de lo que piensas.

Puse el código de referencia en github .

Si le preocupa la velocidad de las concatenaciones de cadenas a este nivel, está utilizando un lenguaje incorrecto. Compile una aplicación en C para este caso de uso y llame a eso en su script PHP, si esto realmente es un cuello de botella.

Sí lo hay, sin embargo, la diferencia es muy insignificante entre

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

y

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

Si usaste:

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

La diferencia sería ligeramente mayor (pero probablemente aún insignificante), la razón de esto es, si recuerdo correctamente (puedo estar equivocado en esto), que PHP escanea y analiza el contenido entre comillas dobles para variables y especiales caracteres (\ t, \ ny así sucesivamente) y cuando se utilizan comillas simples no analiza variables o caracteres especiales, por lo que puede haber un ligero aumento en la velocidad.

¿Por qué no lo prueba y compara la diferencia? Los números no mienten, si encuentra que uno funciona mejor que el otro, entonces debe preguntar por qué.

NO hay diferencia, punto. ;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top