Оптимизация ротатора картинок

Skima

Новичок
Оптимизация ротатора картинок

Приветствую. Поставил себе задачу сделать ротатор картинок, который не покажет за один день одному и тому же пользователю одну и ту же картинку дважды. Может быть когда-нибудь мутирую его в ротатор баннеров.

Возник вопрос реализации выбора рандомной картинки. Делаю так:
PHP:
function show_banner($dir, & $files)
{
	$attempts = 0;
	for($i=0; $i<count($files); $i++)
	{
		if($files[$i]["shown"] == 1)
			$attempts++;
	}
	if($attempts == count($files))
		echo "Вы посмотрели все баннеры";
	else
	{
		$id = rand(0, count($files)-1);
		if($files[$id]["shown"] != 1)
		{
			echo "<img src=".$dir.$files[$id]["name"]."><br>".$files[$id]["name"]."<br>";
			$files[$id]["shown"] = 1;
			return true;
		}
		else
			show_banner($dir, $files);
	}
return false;
}
То есть при каждой загрузке страницы с баннером скрипт проходит по всему массиву названий картинок и смотрит, какие уже показывал. Если показал все, бездельничает, если нет, начинает рандомить случайные номера в этом массиве, пока не найдет не показанную картинку. Если картинок относительно немного, это не будет тормозить, а будет ли это тормозить, если картинок и запросов много? В общем, какие можете дать советы по ускорению или, возможно, есть другие пути реализации?
 

HraKK

Мудак
Команда форума
записывать в массив какие были показыны, а потом генерировать случайную и проверять на наличие in_array.
 

rotoZOOM

ACM maniac
Создавать массив из еще не просмотренных, затем выбирать случайным образом любую из этого массива.
 

kvf77

Red Devil
Автор оригинала: HraKK
rotoZOOM
Логично.
помоему совсем не логично, ибо такой массив заранее будет огромным относительно массива уже просмотренных картинок.
 

HraKK

Мудак
Команда форума
избыточность vs скорость.
Всегда есть и будет.
 

kvf77

Red Devil
Автор оригинала: HraKK
избыточность vs скорость.
Всегда есть и будет.
Что-то мне подсказывает, что картинок там не 10 и не 100, а больше. Избыточность тут будет лишней ибо ударит и памяти.
 

rotoZOOM

ACM maniac
kvf77 Ваше предложение? У ТС как раз элементы обрабатываются из массива.
 

Breeze

goshogun
Команда форума
Партнер клуба
а откуда массив с картинками берется?
 

Skima

Новичок
При первом посещении пользователем страницы с баннером стартует сессия, при этом в неё сохраняется список имён файлов с картинками, которые лежат по соседству.

Собственно, $files живёт в сессии.

Это тоже расточительно или вполне пойдет? При наборе из 100-1000 картинок.
 

rotoZOOM

ACM maniac
Skima А ты посмотри размер файла сессии при 1000 картинок, помножь на расчитываемое количество пользователей за среднее время жизни сессии, и поймешь сколько PHP примерно придется распарсивать данных при каждом запросе страницы. Но, как я понял из твоего сообщения, необходимо не показывать одинаковые картинки в течении суток, а не за время жизни сессии. Отсюда вопрос: как собираешься реализовывать этот механизм на сессиях, и не лучше ли будет сделать это же используя БД?
 

Skima

Новичок
Ммм... на сессиях делать куку, живущую 24 часа. Это же реально?

А как реализовать с помощью БД?
 

Breeze

goshogun
Команда форума
Партнер клуба
Skima

БД -- полезный мутатор ротатора, а сколько удовольствия и плюшек от использования. Ни циклы, ни рекурсия не понадобятся. Даже статистику можно со временем сделать.

смотри в сторону join.
 

Skima

Новичок
Не... как тогда пользователя унифицировать? ) Всё остальное понятно как делать...
 

Breeze

goshogun
Команда форума
Партнер клуба
кукой

-~{}~ 28.11.08 00:57:

id сессии
id пользователя, если авторизован
 

Skima

Новичок
Хмм... сейчас сделаю оба варианта и буду сравнивать ) *пошёл искать 1к картинок*
 
Сверху