Получается, что пишем код как попало, делаем узкие места где попало, а потом оптимизируем код, который был написан как попало, в котором где попало можно найти узкие места. Непорядок товарищи! Наша власть будет с этим бороться, любыми методами. Ура Ура Ура... :lol:
Hight, а ведь так обычно и получается. И не мы все неправильные программисты, а от нас хотят быстрее.
Петр А как же тогда показать все записи из бд? Я делал так: PHP: <?php $rows = mysql_num_rows($query); for($i=0; $i<$rows; $i++) { $mass = mysql_fetch_array($query); echo $mass['field']; } ?> Если же mysql_fetch_array() вынести за пределы цикла, то уже не будут выведены поля Скажи пожалуйста, как ты избегаешь запросов в цикле и при этом сохраняешь саму суть
host, это не запрос в цикле, это обработка результатов запроса. запрос в цикле вот: PHP: <? while (1) $r = mysql_query("select ..."); ?>
Sergey89 Твой? Тем, что это тест и в реальности такие регулярки просто не используют. Не имею привычки простейшие вещи, которые легко реализуються str* функциями писать на регулярках, ибо медленее. Регулярки используются для валидации e-mail'a к примеру или для обработки BBCode (и то, большую часть я обрабатываю str_replace'om, а то что он не в силах сделать, делаю уже регуляркой - к примеру [a]http://[/a] и [a=http://]some text[/a]) - вообщем для более-менее сложных вещей, где использование str функций или гемморно да и неоправдано бо есть регулярки
А. Что спорите, все равно в php6 POSIX уже не будет. Напоминает тот тест на Apple.com — там где Safari быстрее всех. Ага. Просто onload генерирует раньше, чем страница догрузится... Эт я к тому, что при желании, тестами можно доказать что угодно ^_^
Горбунов Олег Ну с последним я бы не согласился. Была взята реальная задача и решена двумя разными инструментами. Результат выше есть. Я думаю в данном случае доказать что POSIX всё-же быстрее чем PRCE не удасца ^_^ З.Ы. Ты меня заразил этим смайликом.... ^_^
Покажите мне узкое место... ...включить дебаг (если есть конечно) для логирования SQL запросов - вот вам и все узкие места, зачастую, оптимизировать надо именно архитектуру, вылизывая код (убирая sizeof из циклов, шаманя с регулярками) вы не добьетесь такого повышения производительности, как если уберете пару лишних обращений к БД...
С этим не поспоришь, помниться тоже наткнулся разок с приблизительно следующим: Задача - вывести инфу о юзерах для странички статистики: PHP: <? // получим список всех id $arrUsers = $db->queryAll('select id from users'); $arrUsersData = array(); for($i=0;$i<sizeof($arrUsers);$i++){ // получим инфу о конкретном юзере $arrUsersData[] = $db->queryRow("select * from users where id = {$arrUsers[$i]}"); } ?> Конечно это упрощенный пример того что было, но достаточно точно иллюстрирует, что если мы оптимизируем код вынеся sizeof из цикла, и переменную из кавычек - то это не даст такого результат в сравнении с избавлением от лишних обращений к БД (от запросов в цикле о которых говорит Петр)
AntonShevchuk Если честно, приведенный Вами код - это такой изврат... Я надеюсь, Вы его нигде не используете, и что это иллюстрация того, как делать нельзя. PHP: $data = array(); $r = mysql_query('select * from `users`'); while ($d = mysql_fetch_*($r)) { $data[] = $d; }
dark-demon Суть в том, что мои две строчки заменяют те пять и неопределенное количество уходящих запросов. А лимиты это что называется докопаться не до чего.
Лимиты, не лимиты... Лимиты можно и не ставить, хотя конечно постраничный вывод куда удобнее. Просто пример в корне показывает как не надо делать. К тому-же автор ступил совсем, зачем сперва выбирать id из таблицы users а потом из неё же снова выбирать, только уже ВСЕ поля. Крайне идиотский пример. Смысл он бы имел в таком варианте PHP: <?php // получим список всех пользователей $arrUsers = $db->queryAll('select * from users'); $arrUsersData = array(); for($i=0;$i<sizeof($arrUsers);$i++){ // получим доолнительную инфу о конкретном юзере $arrUsersData[$arrUsers[$i]] = $db->queryRow("select * from users_details where id = ".$arrUsers[$i]); } ?> Что переписываеться примерно так PHP: <?php $arrUsers = $db->queryAll('SELECT * FROM users LEFT JOIN users_details ON usd_id = usr_id'); for ($i = 0, $cnt = sizeof($arrUser); $i < $cnt; $i++){ // Здесь чё-то делаем типа htmlspecialchars и прочее } ?>
проверил ради интереса цикл for и foreach Задача их была просто пройтись по всему массиву состоящему из 1000 значенений Результаты: цикл for - 0.70383500 цикл foreach - 0.39325800 Получается, что foreach работает в 2 (!) раза бестрее цикла for
Это все оптимизация SQL запросов. Петруха говорил про оптимизацию кода. host Это смотря что и как перебирать.
Davil И кода тоже - вместо того что бы вызывать 1 + кол-во юзеров запросов вызываеться один запрос и его результат обрабатываеться НАМНОГО быстрее. А вообще, оптимизация кода - это всё вместе, а не отдельно SQL запросы и отдельно циклы. Код он и в африке код. Оптимизировать можно отдельно базу данных накладывая индексы и модифицирую саму базу - код можно даже не менять, а оптимизацияч нехилая получиться.