PHP debug() функция 4 дня транса..
Feb 04

Прочитал тут недавно у одного адепта, что не имеет смысла оптмизировать строки и писать в ординарных кавычках, что лучше строить боинги :) которые видимо развалятся не взелетев с таким подходом :D ПОХАПЕ сам по себе гавноязык, который нужно оптимизровать везде насколько можно, если нужна максимальаня производительность, что особо сказывается на крупных проектах. Слово крупный тут не значит использование всевозможных фреймворков и больших денег за работу, слово крупный тут имеет смысл большой нагрузки, где каждый выигранный % производительности на счету.

Не поленился написать нубоскрипт, вот результаты:

# vars    time with "       time with '       performance
1         3.6974380016327   2.5139710903168   147.08%
2         6.0501251220703   5.0527441501617   119.74%
3         8.2543439865112   7.8380331993103   105.31%
4         10.672549962997   10.420034885406   102.42%
total     28.674457073212   25.824783325195   111.03%  

Отсюда видно, что максимальный отрыв наблюдается при подстановке 1ой переменной :) и даже при падении скорости при подстановке 4х переменных, общая производительность выше. Поэтому не ленитесь и пишите все строки сразу с 1ой кавычкой, тем более если нужно подставить всего 1ну переменную.

Сорцы:

<?php
$var = 'lolo';
$var2 = 'test';
$var3 = 'preved';
$var4 = 'kagdila';
$time1 = $time2 = array();

//bench
$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = "bugaga nah suko bugaga nah suko bugaga nah suko bugaga nah suko $var";
$time1[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = 'bugaga nah suko bugaga nah suko bugaga nah suko bugaga  nah suko '.$var;
$time2[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = "bugaga nah suko bugaga nah suko bugaga nah suko bugaga $var3 nah suko $var";
$time1[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = 'bugaga nah suko bugaga nah suko bugaga nah suko bugaga '.$var3.' nah suko '.$var;
$time2[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = "bugaga nah suko $var2 bugaga nah suko bugaga nah suko bugaga $var3 nah suko $var";
$time1[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = 'bugaga nah suko '.$var2.' bugaga nah suko bugaga nah suko bugaga '.$var3.' nah suko '.$var;
$time2[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = "bugaga nah suko $var2 bugaga nah suko bugaga $var4 nah suko bugaga $var3 nah suko $var";
$time1[] = microtime(true) - $start;

$lol = '';
$start = microtime(true);
for($i=0; $i<10000000; $i++)
    $lol = 'bugaga nah suko '.$var2.' bugaga nah suko bugaga '.$var4.' nah suko bugaga '.$var3.' nah suko '.$var;
$time2[] = microtime(true) - $start;

//output
$format = 'A10A18A18A12';
print pack($format, '# vars', 'time with "', 'time with \'', 'performance')."\n";
foreach($time1 as $k=>$v) {
    print pack($format, $k+1, $time1[$k], $time2[$k], round($time1[$k]*100/$time2[$k], 2).'%')."\n";
}
print pack($format, 'total', array_sum($time1), array_sum($time2), round(array_sum($time1)*100/array_sum($time2), 2).'%')."\n";
?>

No related posts.

3 Responses to “Тест производительности с кавычками на PHP”

  1. Dmytro Shteflyuk Says:

    А теперь покажи реальное приложение, где ты 10000000 раз подставляешь одну переменную в строку :-) В реальном приложении у тебя будет разница одна милисекунда против двух.

  2. admin Says:

    1 - запись в файл 15-30м+ строк (с консоли)
    2 - генерация XML

    1м лупов взято просто для чистоты экспериментов, допустим это 1м трафа в сутки, даже +1-5% прироста это 10-50к трафа выигрыша :) суть не в том что из-за ординарных кавычек приложение станет работать в 2 раза быстрей, нет :) суть в том, что выигрышь в скорости есть, и для него не надо сидеть час и “перефигачивать” строки) просто писать сразу с ‘ ‘ ;) шифт будет целей и больше трафа залезет..

    и может быть тут есть такой фактор “для себя” или “на дядю” :) во втором варианте ессесно может быть лень конкатенанировать везде :-D

  3. finalist Says:

    # vars time with " time with ‘ performance
    1 31.1688570976 4.92955899239 632.28%
    2 34.4501850605 8.44521808624 407.93%
    3 37.4188489914 12.6438271999 295.95%
    4 40.6829819679 15.9264369011 255.44%
    total 143.720873117 41.9450411797 342.64%

Leave a Reply

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)

You must read and type the 5 chars within 0..9 and A..F, and submit the form.

  

Oh no, I cannot read this. Please, generate a