![]() |
![]() |
DIVЕR 29.03.2004 - 17:27 |
Я как-то недавно задумался, целесообразно ли это: afaik, строки в одинарных кавычках aka апострофах не "парсятся" на переменные и замены типа \t или \n. Поэтому, если всегда пытаться делать, например, if ( $uri != '/index.html' ) вместо if ( $uri != "/index.html" ) то будет ли в принципе скрипт работать быстрее? Т.е. всегда работать "по-минимуму" (нет лучше так - 'по-минимуму' =)), ведь по идее тогда PHP даже не вызывает процедуры 'парсинга' строк, что должно повышать быстродействие... Или я слишком "гружусь"? =))) и выигрыш может измеряться милисекундами?.. |
nd 1 - 29.03.2004 - 17:36 |
безусловно, одинарные кавычки - это хороший тон разница в производительности - от 5 до 100%. это не будет заметно на маленьких проектах, но вылезет большим боком на крупных |
DIVЕR 2 - 29.03.2004 - 17:48 |
Вот я тоже думаю, что в крупных проектах это пойдёт на пользу... Надо бы вообще-то протестировать =), но руки не доходят %) ... |
Zeratul 3 - 29.03.2004 - 18:16 |
Была где-то ссылка на форуме (давно) на исследование в разнице скорости в зависимости от синтаксиса. Насчет топика не знаю, но print "aaaa".$var; работает на 40% быстрее чем: print "aaaa$var"; Также мадленно работает for each... А по поводу грузиться... Вообще существует КУЧА методов как заставить скрипт летать без сильных усилий. вариант 1 - сохранять страницу в html. Если у тебя новость в БД фигли сервак каждый раз напрягать. Делаешь темплатку по шаблону, а потом или file("news1.tpl") или inсludе "..." - в зависимости от скрипта. Кстати, у меня даже форум так пашет - ну зачем делать выборки, че-то там селектить если страница не меняется. Обновлении - при новом посте/теме/редактировании/удалении - вызов отдельного скрипта типа save_pages.php Это первое. Второе. Почти всегда "тяжелый" скрипт можно ускорить. Т.е. сначала пишется, юзается, потом уже начитается улучшение. Третье. Если сервак "под столом", то начальству ДЕШЕВЛе купить проц вдвое мощнее нежели оплачивать твою работу по исправлению быстродействия. |
Capo 4 - 29.03.2004 - 18:57 |
to Zeratul... Не всегда правильно юзать эту конструкцию как ты сделал для форума.... |
Zeratul 5 - 29.03.2004 - 20:11 | to Capo: ясен пень не всегда. Я просто описываю такую возможность. |
Mips 6 - 30.03.2004 - 11:33 |
теоретически в одинарных кавычках должно работать быстре, но на практике не заметно. Да и вообще, всё время разные результаты, то первый вариант процентов на 10 выигрывает, то второй... <? function getmicrotime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } $start1 = getmicrotime(); for ($i=0; $i < 1000000; $i++){ $a='qwerty'; } $end1 = getmicrotime(); $time1 = $end1 - $start1; $start2 = getmicrotime(); for ($i=0; $i < 1000000; $i++){ $a="qwerty"; } $end2 = getmicrotime(); $time2 = $end2 - $start2; echo "First: ".$time1." s.<br>Second: ".$time2." s."; ?> |
DIVЕR 7 - 30.03.2004 - 13:14 |
Так тут-то понятно что разница небольшая! =))) Видимо, интерпретатор не настолько глупый, чтобы сразу парсить строку в двойных кавычках на всё что вообще возможно. ИМХО, если попробовать не $a="qwerty"; а, скажем, $a="qwerty$aaa${a}\\n\\t"; то результаты могут быть совсем другими... |
Mips 8 - 30.03.2004 - 13:49 |
DIVЕR, а проверить самому не судьба? ;) Проверил на цикле 10000 выражение DIVЕR'а... и вот результат... First: 0.011014938354492 s. Second: 2.3054928779602 s. Как видно... двойные кавычки обрабатывают данную строку в 200-250 раз дольше. Делаем выводы, господа ;) |
Zeratul 9 - 30.03.2004 - 13:52 |
<? function getmicrotime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } $start1 = getmicrotime(); for ($i=0; $i < 1000000; $i++){ $a=$i.'qwerty'; } $end1 = getmicrotime(); $time1 = $end1 - $start1; $start2 = getmicrotime(); for ($i=0; $i < 1000000; $i++){ $a=$i."qwerty"; } $end2 = getmicrotime(); $time2 = $end2 - $start2; echo "First: ".$time1." s.<br>Second: ".$time2." s."; ?> ------------------------------------ First: 4.12999391556 s. Second: 4.52885508537 s. -- First: 4.34515094757 s. Second: 4.18776202202 s. -- First: 4.63059902191 s. Second: 4.11747384071 s. -- First: 6.3126502037 s. Second: 4.31054997444 s. -- First: 6.53443694115 s. Second: 4.1238629818 s. |
DIVЕR 10 - 30.03.2004 - 17:25 |
Mips, дни у меня бешеные как обычно =)))) Генеральные репетиции тут всякие...... Я щас другой вариант проверю, более жизненный =))) |
DIVЕR 11 - 30.03.2004 - 17:53 |
В общем, докладываю =))) Тестировал я довольно жизненные операции: $a = $i . " qwerty"; $a = "$i qwerty"; $a = $i . ' qwerty'; Сначала я думал, что последняя будет самой быстрой.... %-| Ладно, шучу, так оно и оказалось =))) Результаты: Uno : 0.202599048615 s. Dos : 0.279953956604 s. Tres: 0.180957078934 s. Uno : 0.18692111969 s. Dos : 0.290097951889 s. Tres: 0.182934045792 s. Uno : 0.194889068604 s. Dos : 0.283339977264 s. Tres: 0.191181898117 s. Uno : 0.210453987122 s. Dos : 0.317251205444 s. Tres: 0.186588048935 s. Чем тестировал (всё тем же): <pre> <? function getmicrotime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } define( 'max', 65535 ); $start1 = getmicrotime(); for ($i=0; $i < max; $i++){ $a = $i . " qwerty"; } $end1 = getmicrotime(); $time1 = $end1 - $start1; $start2 = getmicrotime(); for ($i=0; $i < max; $i++){ $a = "$i qwerty"; } $end2 = getmicrotime(); $time2 = $end2 - $start2; $start3 = getmicrotime(); for ($i=0; $i < max; $i++){ $a = $i . ' qwerty'; } $end3 = getmicrotime(); $time3 = $end3 - $start3; echo 'Uno : ' . $time1 . ' s.<br>Dos : ' . $time2 . ' s.<br>Tres: ' . $time3 . ' s.'; ?> </pre> Прирост скорости, конечно, есть, и ИМХО если в цикле очень_много таких простейших присваиваний, то кавычки или апострофы имеют значение... |