вот еще одна идея появилась... Как влияют пустые строчки в коде на быстродействие скрипта. Проводился аналогичный эксперемент с переменными и было совершенно очевидно что переменная с именем в 40 символов существенно тормозит сценарий... Конечно пустые строки это не переменные но тем не менее интерестно же. И так тест начался и ничего не показал... HTML: тест быстродействия скрипта: контрольный замер: 0.003178 0.003169 0.003175 0.003152 0.003228 5 пустых строк перед скриптом: 0.003273 0.00318 0.003252 0.003622 0.003167 40 пустых строк перед скриптом 0.003178 0.003199 0.003152 0.003197 0.003202 5 пустых строк после скрипта 0.003239 0.003286 0.003167 0.003209 0.003199 пустые строки положительно влияют на читабельность скрипта и никак не влияют на его быстродействие. Даже эффект "поспал на Enter'e" мало отразился на скорости выполнения операции цифры были примерно такими: 0.003181 0.003624 0.003234
Volt(220) а теперь заюзай mysqli c PS и сравни результаты на сколько вывод в цикле стал ближе или дальше к одному запросу. Ну если не влом.
Я бы попросил все пред идущие тесты оформить в один большой пост, с нормальными рассуждениями, что бы было понятно всем. Ибо на данный момент у меня лично мозг срывает, ставить ссылку с первой страницы на тесты не буду.
array_shift vs array_pop PHP: <? $arr=range(0,1000); $time=microtime(1); for($i=0;$i<1000;$i++){ array_shift($arr); } print (microtime(1)-$time); //0.0100119113922 $arr=range(0,1000); $time=microtime(1); for($i=0;$i<1000;$i++){ array_pop($arr); } print (microtime(1)-$time); // 0.00113892555237 ?>
Эффективное уменьшение изображений, или как можно сэкономить 400% времени. Типичная задача - пропорционально уменьшить изображение со сглаживанием. Код (PHP): <?php $start = microtime(1); $ava = imagecreatefromjpeg('1.JPG'); // Фотография, 3648x2736, 3660кб // Сглаживаемое уменьшение $x = imagesx($ava); $y = imagesy($ava); $qr = ($x > $y ? $x : $y) / 210; $nx = round($x / $qr); $ny = round($y / $qr); $sava = imagecreatetruecolor($nx, $ny); imagecopyresampled($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y); echo 'Resampled max memory usage: '.round(memory_get_usage()/1024, 2),' Kb<br>'; echo '<br>'; echo substr(microtime(1) - $start, 0, 6); Код (Text): Resampled max memory usage: 49050.77 Kb 3.1943 Три секунды - это слишком, даже если php работает под windows 7 =) Оказывается, если предварительно уменьшить изображение без сглаживания, можно выйграть до 400% времени. Чем больше изображение, тем больше времени мы сэкономим: Код (PHP): <?php $start = microtime(1); $ava = imagecreatefromjpeg('1.JPG'); // Простое уменьшение $x = imagesx($ava); $y = imagesy($ava); $qr = ($x > $y ? $x : $y) / 420; $nx = round($x / $qr); $ny = round($y / $qr); $sava = imagecreatetruecolor($nx, $ny); imagecopyresized($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y); echo 'Resized max memory usage: '.round(memory_get_usage()/1024, 2),' Kb<br>'; imagedestroy($ava); $ava = $sava; // Сглаживаемое уменьшение $x = imagesx($ava); $y = imagesy($ava); $qr = ($x > $y ? $x : $y) / 210; $nx = round($x / $qr); $ny = round($y / $qr); $sava = imagecreatetruecolor($nx, $ny); imagecopyresampled($sava, $ava, 0, 0, 0, 0, $nx, $ny, $x, $y); echo 'Resampled max memory usage: '.round(memory_get_usage()/1024, 2),' Kb<br>'; echo '<br>'; echo substr(microtime(1) - $start, 0, 6); Код (Text): Resized max memory usage: 49543.95 Kb Resampled max memory usage: 911.55 Kb 0.7314 Качество получаемого изображения у обоих вариантов почти одинаковое. У второго, разве что, на контрастных диагоналях чуть более заметны лесенки.
Давно слышал, что использование рекурсивной функции для нахождения факториала ГОРАЗДО медленней других способов. Решил проверить, чисто из любопытства, причем на РНР. Код (PHP): <?php /** * Стандартная функция нахождения факториала. * Реализована "тыщу" раз */ function Factorial($number) { if($number <= 1) { return 1; } else return ($number * Factorial($number - 1)); } /** * ================================================ */ $start = microtime(true); for($i = 1; $i <= 100; $i++) { Factorial($i); } echo (microtime(true) - $start) * 1000 . "\r\n"; /** * ================================================ */ $start = microtime(true); $result = 1; $factorial = 100; for($i = 1; $i <= $factorial; $i++) { $result *= $i; } echo (microtime(true) - $start) * 1000 . "\r\n"; ?> Результаты: Код (Text): C:\Users\Apple>php -f D:\htdocs\listing.php 28.565883636475 0.51212310791016 C:\Users\Apple> Ничего нового.
не корректный пример с циком. Ты циклом считашь только 100!, а реккурсивно 1!, 2!, 3!…100! На результаты замеров повлияет не сильно, но это fake
PHP: <?/* error_reporting(E_WARNING | E_ERROR); $time=microtime(1); for($i=0;$i<100000;$i++) if($var['key']){} print "no Nocite; Time: ".(microtime(1)-$time); //no Nocite; Time: 0.110560178757 //no Nocite; Time: 0.133510112762 //no Nocite; Time: 0.131765127182 */ /* error_reporting(E_ALL); $time=microtime(1); for($i=0;$i<100000;$i++) if(@$var['key']){} print "with Nocite; Time = ".(microtime(1)-$time); //with Nocite; Time = 0.247816085815 //with Nocite; Time = 0.249211788177 //with Nocite; Time = 0.234683990479 */ error_reporting(E_ALL); $time=microtime(1); for($i=0;$i<100000;$i++) if(!empty($var['key'])){} print "with check Nocite; Time = ".(microtime(1)-$time); //with check Nocite; Time = 0.026829957962 //with check Nocite; Time = 0.0329627990723 //with check Nocite; Time = 0.0266950130463 ?> нотисы зло. производительность упала в целых два раза на 100000 нотисов никаких собак в коде =) но на самом деле нотисы нужно предотвращать гуманными методами
Mr.M.I.T. а если 1. error_reporing(0) 2. display_errors 0 3. error_log /phperror.log 4. ключи массива без кавычек
Есть 10 полей varchar, все одинакового содержания, 10 000 записей. Нужно выбрать только 9. Что быстрее: 1.SELECT * (не важно что 10-е поле не используем); 2. SELECT t1, t2, t3, t4, t6, t7, t8, t9, t10.
SELECT * FROM `t` 10,000 всего, запрос занял 0.0010 сек. 10,000 всего, запрос занял 0.0012 сек. 10,000 всего, запрос занял 0.0365 сек. 10,000 всего, запрос занял 0.0365 сек. 10,000 всего, запрос занял 0.0366 сек. SELECT id,q1,q2,q3,q4,q5,q6,q8,q9 10,000 всего, запрос занял 0.0011 сек. 10,000 всего, запрос занял 0.0365 сек. 10,000 всего, запрос занял 0.0011 сек. 10,000 всего, запрос занял 0.0011 сек. 10,000 всего, запрос занял 0.0010 сек. это печально..
на сколько я понимаю, большая часть корректности тестов формируется по знанию кода, с помощью которог тесты проводились. Намёк понятен? ))
Костян У меня нет столько времени, чтоб заморачиваться над этим) и так уговорить себя пришлось, чтоб табличку создать, записей накидать, покопипастить на форум