Domanda

C'è una differenza di velocità tra, diciamo:

$ newstring = " $ a e $ b sono usciti per vedere $ c " ;;

e

$ newstring = $ a. & Quot; e " . $ b. & Quot; è andato a vedere " . $ C;

e se sì, perché?

È stato utile?

Soluzione

A seconda della versione di PHP, varia di quanto il secondo è più veloce se lo scrivi come: $ newstring = $ a. ' e ' . $ b. 'andato a vedere'. $ C;

PHP è molto incoerente da una versione all'altra e costruisci per costruire quando si tratta di prestazioni, devi testarlo tu stesso. Ciò che occorre dire è che dipende anche dal tipo di $ a , $ b e $ c , come puoi vedere di seguito.

Quando usi " , PHP analizza la stringa per vedere se al suo interno sono presenti variabili / segnaposto, ma se usi solo ' PHP la tratta come una semplice stringa senza ulteriori elaborazioni. Quindi in genere ' dovrebbe essere più veloce. Almeno in teoria. In pratica è necessario testare .


Risultati (in secondi):

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 di questo codice 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 />';

?>

Altri suggerimenti

Probabilmente ci sarà una differenza di velocità, poiché si tratta di due diverse sintassi. Quello che devi chiedere è se la differenza è importante. In questo caso, no, non penso che tu debba preoccuparti. La differenza sarebbe troppo trascurabile.

Ti consiglierei di fare tutto ciò che ha più senso per te visivamente. " $ a e $ b sono usciti per vedere $ c " può essere un po 'confuso quando lo si guarda. Se volessi seguire questa strada, suggerirei parentesi graffe attorno alle tue variabili: " {$ a} e {$ b} sono usciti per vedere {$ c} ".

Ho fatto un rapido benchmark e, come altri hanno già detto, i risultati erano molto incoerenti. Non ho notato alcun miglioramento delle prestazioni usando virgolette singole anziché doppie. La mia ipotesi è che tutto si riduce alle preferenze.

Potresti voler attenersi a un tipo di preventivo per il tuo stile di codifica e, se lo fai, scegli virgolette doppie. La funzione di sostituzione è utile più spesso di quanto si pensi.

Ho inserito il codice di riferimento su github .

Se sei preoccupato per la velocità delle concatenazioni di stringhe a questo livello, stai usando la lingua sbagliata. Compila un'applicazione in C per questo caso d'uso e chiamala nel tuo script PHP, se veramente è un collo di bottiglia.

Sì, tuttavia, la differenza è molto trascurabile tra

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

e

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

Se hai utilizzato:

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

La differenza sarebbe leggermente maggiore (ma probabilmente ancora trascurabile), la ragione di ciò è, se ricordo bene (potrei sbagliarmi su questo), che PHP scansiona e analizza i contenuti tra virgolette doppie per variabili e speciali caratteri (\ t, \ n e così via) e quando si usano virgolette singole non analizza variabili o caratteri speciali, quindi potrebbe esserci un leggero aumento della velocità.

Perché non lo provi e confronti la differenza? I numeri non mentono, se scopri che uno si comporta meglio dell'altro, dovresti chiederti perché.

NON c'è alcuna differenza, punto. ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top