Вы не зашли.
Главная » PHP » Тесты производительности
#31. JInn Off (2)
Участник
2009.05.06 03:03
Вот еще вопрос. Вывод текста с переменными. Есть три варианта.

1 - echo "text $aaa text";
2 - echo 'text '.$aaa.' text';
3 - echo "text ".$aaa." text";

В первом варианте интерпретатор должен проверять весь текст на $ и пробел, что и замедляет процесс. Это типа ищет переменную.
Во втором варианте проверка не идет (процесс быстрее), но используется конкатенация (даже две), что по идее должно замедлять процесс.
Третий вариант из области антивариантов и "Так писать не надо", так что его можно не иметь ввиду.
Собственно вопрос в том, какой из вариантов, 1 или 2, работает быстрее? Для чистоты эксперимента текст должен быть в двух вариантах. Небольшим - до 50 символов и большим - до 300 символов. Это связано с первым вариантом, там потому что поиск идет. В принципе может кто то и так знает результат?
Как все таки сложно быть ботом...
#32. Gemorroj Off (107)
Administrator
2009.05.06 11:11
ну здесь этот вопрос рассматривался http://wapinet.ru/textbook/speed.htm
правда было это очень давно и, вероятно , на php4. Чуть позже попробую потестить на php5.3
#33. JInn Off (2)
Участник
2009.05.06 18:06
Посмотрел... Скажем так - я в шоке... К тому, что увидел могу добавить, что
$x="test ".$test." test ".$test." test ".$test;
быстрее на 10% чем
$x="test ".$test." test ".$test." test ".$test."";
то есть если последнюю переменную не закрывать, то это хорошо. Не смог правда проверить с одинарными кавычками
Как все таки сложно быть ботом...
#34. Gemorroj Off (107)
Administrator
2009.09.04 16:04
PHP 5.3.1
30 тысяч проходов
Код:
span style="color: #0000BB"><?php// 0.5504// 0.5523// 0.5499// 0.5622// 0.5541$a = 1;switch($a){ case 2: break; case 3: break; default: break;}// 0.4459// 0.4513// 0.4421// 0.4456// 0.4510$a = 1;if($a == 2){}else if($a == 3){}else{}?>
Добавлено спустя   7 минут  18 секунд:
JInn написал:
Посмотрел... Скажем так - я в шоке... К тому, что увидел могу добавить, что
$x="test ".$test." test ".$test." test ".$test;
быстрее на 10% чем
$x="test ".$test." test ".$test." test ".$test."";
то есть если последнюю переменную не закрывать, то это хорошо. Не смог правда проверить с одинарными кавычками
а что здесь шокирующего? нафига делать эту лишнюю конкатенацию с пустой строкой?
#35. Akdmeh Off (9)
Участник
2009.09.05 11:11
Интересно, но как по мне, ради этого не стоит избегать switch, ведь там возможно без break; подключить сразу несколько условий, да и визуально кода немного меньше)
Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink
#36. Gemorroj Off (107)
Administrator
2009.09.05 11:11
Akdmeh, да, зачастую switch удобнее. Но если скорость критически важный параметр, то приходится жертвовать удобством. Я на этот switch обратил внимание когда профилировал Gmanager. Оказалось что одна совсем ничем не примечательная функция определения расширения файла, занимает приличную долю ремени. Тем более что вызывается несколько раз в цикле. Пришлось отказаться от switch и переписать на if / elseif / else. Немного, но прирост производительности это дало.
#37. Akdmeh Off (9)
Участник
2009.09.05 13:01
Конечно, в циклах это бывает важно.
Кст, сравни у себя mb_substr и iconv_substr - интересно что у тебя выйдет.
Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink
#38. Gemorroj Off (107)
Administrator
2009.09.05 14:02
ок smile
Кстати, сейчас искал самый быстрый способ прохода по папке, без подпапок. Вероятно это достигается следующим способом:
Код:
span style="color: #0000BB"><?php$arr = array_diff(scandir('directory/', 0), array('.', '..'));?>
Пробовал в т.ч. новые итераторы, но с ними как минимум в 3 раза медленнее.
#39. Gemorroj Off (107)
Administrator
2009.09.05 14:02
iconv_substr быстрее примерно на треть.
100000 проходов
Код:
span style="color: #0000BB"><?php// 3.5349// 3.6812// 3.6436$a = "";iconv_substr($a, 0, 6, "UTF-8");// 5.7895// 5.8432// 5.8222$a = "";mb_substr($a, 0, 6, "UTF-8");?>
Такая же ситуация, если переменной $a присвоить какую-нибудь длинную строку.
Нужно отметить, что многое зависит от кодировки. Если у mb_substr стоит какая-нибудь однобайтовая кодировка, а у iconv_substr мультибайтовая, то естественно mb_substr выиграет.
#40. AND Off (11)
Участник
2009.11.06 22:10
MySQLi. Запрос с подготовленным выражением и без него.
Код:
span style="color: #0000BB"><?php$db = new Mysqli('localhost', 'root', '', 'test') or die('Can not connect to MySQL');$prepare = true;$integer = 1234567890;$string = 'dgjmnvyuoplhgdenjhtrmnfqskytkgoyhjkdfmdigjewruytgrehguhksjgijerpoiwhgjeijgewyewyhlnjkbgsyigbvydbwg';$start = microtime(true); if($prepare) { $stmt = $db->prepare('INSERT INTO test (`integer`, `string`) VALUES (?, ?)'); $stmt->bind_param('is', $integer, $string); for($i = 0; $i < 10000; $i++) { $stmt->execute(); } $stmt->close(); // 10000 проходов // 5.50247 // 5.46265 // 5.59152 // 1 проход // 0.00141 // 0.00125 // 0.00172}else { for($i = 0; $i < 10000; $i++) { $db->query('INSERT INTO test (`integer`, `string`) VALUES ('.intval($integer).', "'.$db->real_escape_string($string).'")'); } // 10000 проходов // 6.11369 // 6.08014 // 6.16883 // 1 проход // 0.00082 // 0.00106 // 0.00067}echo round(microtime(true) - $start, 5);$db->close();?>
Страниц: 1 2 3 4 5 Все
Главная
WEB
PunBB Mod v0.6.2
0.018 s