[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как оптимизировать код?
kir25
Доброй ночи, подскажите пожалуйста как можно выполнить следующую задачу правильно. Я сделал, работает, но чувствую, что это неправильный способ, который будет жрать много рессурсов на сервере. ВОт такая задача:


<?php
$rec = mysql_query ("SELECT `id`,`title` FROM `djf`");
while ($my = mysql_fetch_assoc ($rec))
{
print '
<ul class="nav">
<li> <a href="view_cat.php?cat='
.(int)$my["id"] . '">'.mysql_real_escape_string ($my["title"]).'</a> </li>
</ul>'
;
if ($my['id'] == 9) {break;}
}

?>
<p> А ВОТ В ЭТОМ МЕСТЕ, МНЕ НАДО ВЫВЕСТИ СТИЧНУЮ html РАЗМЕТКУ, ПОСЛЕ ЧЕГО ПРОДОЛЖИТЬ ВЫВОД ИЗ БАЗЫ КАК ПОКАЗАНО НИЖЕ </p>

<?php
while ($my = mysql_fetch_assoc ($rec))
{
print '
<ul class="nav">
<li> <a href="view_cat.php?cat='
.(int)$my["id"] . '">'.mysql_real_escape_string ($my["title"]).'</a> </li>
</ul>'
;
if ($my['id'] == 14) {break;}
}


?>



Может я ошибаюсь, но мне кажется я нашел дурандотское решение(я новичок). Будут ли ассоциативные массивы, пускай и повторяющие ($my = mysql_fetch_assoc ($rec)) тянуть рессурсы сервера? Наверное, есть какой-то более правильный способ. Спасибо!



Спустя 1 час, 16 минут, 16 секунд (21.12.2011 - 02:46) vital написал(а):
Цитата
cat='.(int)$my["id"] . '"

здесь не надо приводить тип к инту.
Вы берете строку, делаете ее явно числом, потом снова не явно строкой.
Цитата

Наверное, есть какой-то более правильный способ.

Используйте просто один цикл.
Ничего не мешает закрыть пхп тег внутри цикла, вывести разметку, и снова открыть и продолжить цикл.

И еше - намного лучще это хтмл сгенерить один раз еще на сервере, а дальше сделать просто 2 раза echo $peremennaya_s_paginatorom

Спустя 1 час, 1 минута, 41 секунда (21.12.2011 - 03:48) SitnikovArtur написал(а):
Для начала можно заранее определить номера айдишников ($my['id']), после которых будет выводиться какой-то статический код.

$arrayStaticCode = array(9,14);


Затем можно определить функцию, которая будет выводить некий html код в зависимости от номера id ($my['id'])

function echoStaticCode($id)
{
if (id == 9) echo '9';
if (id == 14) echo '14';
// switch


потом просто выводите все в одном цикле, а по нужному условию запускаете функцию

 // вместо if ($my['id'] == 9) {break;}
if (in_array($my['id'], $arrayStaticCode)) echoStaticCode($my['id']);


если функция вывода html кода не требуется, так как код может быть только одного вида, а само появление кода требуется например после каждого пятого сообщения, то можно поставить примерно такое условие


if ($my['id'] % 5 == 0) {echo 'html код';}


так как массив начинается с нулевого элемента, а не с первого, избавиться от погрешности можно добавлением в условие еденицы


if ( ($my['id'] + 1) % 5 == 0) {echo 'html код';}

Спустя 7 часов, 17 минут, 3 секунды (21.12.2011 - 11:05) kir25 написал(а):
Спасибо, vital и SitnikovArtur -доберусь до дома и сразу попробую посоветованные вами решения. Осталось два, в принципе, только теоритеческих вопроса - может подскажете:

А в принципе один и тот же ассоциативный массив в разных циклах тянет рессурсы?

Я написал свою движку для сайта - правда, не знаю насколько это оправданно по сравнению с Джумла или Вордпресс, но вот решил попробовать. на Денвере все работает на сервер еще не грузил - контентом забиваю.

Ваше впечатление - что лучше нормальный самописный движок (сайт не сложный, постараюсь оптимизировать) или Джумла, Вордпресс?

Спустя 1 час, 16 минут, 4 секунды (21.12.2011 - 12:21) SitnikovArtur написал(а):
Можно написать блог, который на обычном хостинге за 150 руб/мес. потянет в 20 раз больше пользователей онлайн, чем вордпресс, а можно написать что и в 20 раз меньше.

Если самописный движок использует запросы сложнее select a, b, c from d where e in (x, y, z) из не memory таблиц, а тем более left join, и это не поиск, то такой движок был написан зря. Есть еще несколько ньансов, почему лучше самописные решения, но все они касаются исключительно производительности. Производительность это вообще самое важное в программировании.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.