|
| sprintf vs. str_replace ? Fra : Ulrik Nielsen |
Dato : 01-03-04 10:33 |
|
Hej der,
Er der nogen der har en mening om sub?
- er det hurtigere/bedere at bruge sprintf eller str_replace på enkelte
"replaces" ?
ex:
$tst = "dette er %s test";
echo str_replace('%s', 'en', $tst);
echo sprintf($tst,'en');
anyone ?
--
>> ulrik nielsen
excuse of the day : Cosmic ray particles crashed through the hard disk
: platter
from bofh : http://www.cs.wisc.edu/~ballard/bofh/
| |
Kim Emax (01-03-2004)
| Kommentar Fra : Kim Emax |
Dato : 01-03-04 17:31 |
|
"Ulrik Nielsen" <un.spam@tiscali.dk> wrote
> Er der nogen der har en mening om sub?
> - er det hurtigere/bedere at bruge sprintf eller str_replace på enkelte
> "replaces" ?
>
> ex:
> $tst = "dette er %s test";
> echo str_replace('%s', 'en', $tst);
> echo sprintf($tst,'en');
>
> anyone ?
har du prøvet at lave en løkke, der kører eks. 10.000 gange og måle
forskellen?
--
Take Care
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk
| |
Thomas Lindgaard (01-03-2004)
| Kommentar Fra : Thomas Lindgaard |
Dato : 01-03-04 21:28 |
|
On Mon, 01 Mar 2004 17:31:18 +0100, Kim Emax wrote:
> har du prøvet at lave en løkke, der kører eks. 10.000 gange og måle
> forskellen?
Det prøvede jeg lige...
<?php
function runtime($start, $end)
{
return ($end['sec'] - $start['sec']) * 1000 +
($end['usec'] - $start['usec']) / 1000;
}
$num_tests = 40;
print "+---------------------------+-------------+-------------+\n";
print "| iterationer | sprintf | str_replace | forskel |\n";
print "+---------------------------+-------------+-------------+\n";
for ($j = 0; $j < $num_tests; $j++)
{
$iterations = 500 * $j + 500;
$start = gettimeofday();
for ($i = 0; $i < $iterations; $i++)
{
sprintf('dette er test nummer %d', $i);
}
$end = gettimeofday();
$sprintf[$j] = runtime($start, $end);
$start = gettimeofday();
for ($i = 0; $i < $iterations; $i++)
{
str_replace('%d', $i, 'dette er test nummer %d');
}
$end = gettimeofday();
$str_replace[$j] = runtime($start, $end);
printf("| %11d | %4.6f | %4.6f | %4.6f |\n",
$iterations, $sprintf[$j], $str_replace[$j],
($sprintf[$j] - $str_replace[$j]) / $iterations);
}
print "+---------------------------+-------------+-------------+\n";
?>
giver følgende output:
+---------------------------+-------------+-------------+
| iterationer | sprintf | str_replace | forskel |
+---------------------------+-------------+-------------+
| 500 | 1.806000 | 2.501000 | -0.001390 |
| 1000 | 3.708000 | 5.223000 | -0.001515 |
| 1500 | 6.954000 | 109.162000 | -0.068139 |
| 2000 | 8.011000 | 113.700000 | -0.052845 |
| 2500 | 9.286000 | 120.874000 | -0.044635 |
| 3000 | 11.451000 | 118.955000 | -0.035835 |
| 3500 | 114.921000 | 17.445000 | 0.027850 |
| 4000 | 14.758000 | 124.073000 | -0.027329 |
| 4500 | 17.006000 | 133.816000 | -0.025958 |
| 5000 | 121.258000 | 25.314000 | 0.019189 |
| 5500 | 123.077000 | 28.382000 | 0.017217 |
| 6000 | 128.427000 | 31.945000 | 0.016080 |
| 6500 | 128.141000 | 33.090000 | 0.014623 |
| 7000 | 127.188000 | 36.156000 | 0.013005 |
| 7500 | 131.950000 | 42.077000 | 0.011983 |
| 8000 | 134.888000 | 40.902000 | 0.011748 |
| 8500 | 132.755000 | 43.936000 | 0.010449 |
| 9000 | 141.815000 | 46.257000 | 0.010618 |
| 9500 | 139.498000 | 49.172000 | 0.009508 |
| 10000 | 138.210000 | 52.144000 | 0.008607 |
| 10500 | 150.028000 | 53.236000 | 0.009218 |
| 11000 | 143.869000 | 55.284000 | 0.008053 |
| 11500 | 150.230000 | 60.148000 | 0.007833 |
| 12000 | 147.816000 | 60.953000 | 0.007239 |
| 12500 | 150.290000 | 68.492000 | 0.006544 |
| 13000 | 153.401000 | 67.042000 | 0.006643 |
| 13500 | 153.732000 | 68.528000 | 0.006311 |
| 14000 | 161.347000 | 71.921000 | 0.006388 |
| 14500 | 157.630000 | 72.791000 | 0.005851 |
| 15000 | 165.963000 | 80.022000 | 0.005729 |
| 15500 | 166.345000 | 79.319000 | 0.005615 |
| 16000 | 170.510000 | 81.994000 | 0.005532 |
| 16500 | 167.122000 | 84.739000 | 0.004993 |
| 17000 | 175.313000 | 86.959000 | 0.005197 |
| 17500 | 171.243000 | 92.090000 | 0.004523 |
| 18000 | 177.703000 | 94.018000 | 0.004649 |
| 18500 | 174.480000 | 95.276000 | 0.004281 |
| 19000 | 184.833000 | 96.902000 | 0.004628 |
| 19500 | 178.659000 | 102.867000 | 0.003887 |
| 20000 | 183.906000 | 101.837000 | 0.004103 |
+---------------------------+-------------+-------------+
str_replace er faktisk en lille smule hurtigere en sprintf (det overrasker
mig) - undtagen lige omkring 1500-4500 iterationer... og det er ikke bare
denne kørsel der udviser den opførsel, idet der altid er nogle af de
små målinger der er meget langsommere for str_replace'es vedkommende.
Mvh.
/Thomas
| |
Ulrik Nielsen (01-03-2004)
| Kommentar Fra : Ulrik Nielsen |
Dato : 01-03-04 21:42 |
|
Thomas Lindgaard wrote:
> On Mon, 01 Mar 2004 17:31:18 +0100, Kim Emax wrote:
>
> Det prøvede jeg lige...
>
> str_replace er faktisk en lille smule hurtigere en sprintf (det overrasker
> mig) - undtagen lige omkring 1500-4500 iterationer... og det er ikke bare
> denne kørsel der udviser den opførsel, idet der altid er nogle af de
> små målinger der er meget langsommere for str_replace'es vedkommende.
cool test.. :)
jeg tror nu også kun at str_replace er hurtig på denne slags replaces...
hvis man udvider strengen til at skulle skifte mere end et "felt" ud, ja
så tror jeg nu at sprintf vinder igen, for ikke at sige, den er mere
velegnet til det ;)
- så er det jo bare om man skal bruge tiden på at optimere her hvor man
(måske) kan spare 0.001390 sec på 500 replaces...
--
>> ulrik nielsen
excuse of the day : IRQ-problems with the
: Un-Interruptible-Power-Supply
from bofh : http://www.cs.wisc.edu/~ballard/bofh/
| |
Thomas Lindgaard (01-03-2004)
| Kommentar Fra : Thomas Lindgaard |
Dato : 01-03-04 22:40 |
|
On Mon, 01 Mar 2004 21:42:22 +0100, Ulrik Nielsen wrote:
> - så er det jo bare om man skal bruge tiden på at optimere her hvor man
> (måske) kan spare 0.001390 sec på 500 replaces...
Lidt har jo også ret! - men ja, sprintf() vil nok være mit foretrukne
valg.
Mvh.
/Thomas
| |
Ulrik Nielsen (01-03-2004)
| Kommentar Fra : Ulrik Nielsen |
Dato : 01-03-04 22:54 |
|
Thomas Lindgaard wrote:
> On Mon, 01 Mar 2004 21:42:22 +0100, Ulrik Nielsen wrote:
>
>>- så er det jo bare om man skal bruge tiden på at optimere her hvor man
>>(måske) kan spare 0.001390 sec på 500 replaces...
>
> Lidt har jo også ret! - men ja, sprintf() vil nok være mit foretrukne
> valg.
jeg er enig, men jeg tror måske at man kunne finde andre steder i ens
kode der kunne trænge til en kærlig hånd _før_ man starter med denne ;)
--
>> ulrik nielsen
excuse of the day : Sysadmin accidentally destroyed pager with a large
: hammer.
from bofh : http://www.cs.wisc.edu/~ballard/bofh/
| |
|
|