Bannerbank за 24 часа

Nikita Kislitsin

Xakep, номер #053, стр. 053-088-3


Конструкция Время работы %

Ereg_replace 0.00007301 21.47%

Preg_replace 0.00034000 100%

С ростом объема теста разница во времени работы этих функций нелинейно возрастает. Это наводит на мысль о том, что с реализацией этих функций у php большие проблемы. Благо, во все современные версии языка встроены perl-заимствованные процедуры, что, в принципе, решает эту проблему.

4) "Быстрый" синтаксис работы с массивами - ускорение до 50%.

Функции сортировки массивов в php реализованы на удивление хорошо - стандартная sort весьма шустро упорядочивает массив в нужном направлении. Я написал собственные функции пузырьковой и шейкерной сортировок, а также быстрой сортировки Хоара - выигрыш в производительности оказался очень незначительным, порядка пяти процентов.

Тест на массиве из произвольных элементов дал вполне ожидаемые результаты: вперед вышла сортировка Хоара, за ней вплотную функция sort(), шейкер и пузырек заметно подотстали. Таким образом, геморроиться, выписывая новые функции сортировки, едва ли стоит, т.к. выигрыш очень небольшой.

Удивили результаты теста на адресацию к элементам массива:

Конструкция Время работы %

$array[int]=$a 0.00044700 52.22%

$array[string]=$a 0.00085600 100.00%

$array["string"]=$a 0.00046100 53.85%

Как видно, конструкции с целочисленной индексацией массивов работают примерно в два раза быстрее, чем аналогичные выражения с текстовыми (длина их мала) ключами _без_ кавычек. Если же взять ключ в кавычки, время работы этих выражений выравнивается.

За дело!

После такой подробной теоретической справки, подкрепленной весьма наглядными тестами, можно приступать и к созданию системы. Хотелось бы в оставшейся части статьи рассказать о принципах построения баннерной системы и определить структуру ее окружения, т.е. таблиц БД. Наш движок будет позволять отображать рекламу нескольких клиентов, каждый из которых может показывать на сайте n баннеров различных размеров. А вот таргетинг, даже самый примитивный, мы здесь описывать не будем, ввиду объемности кода. Я лишь намекну, как самому добавить эту бесценную возможность.

Итак, таблицы БД.

Самая главная - users: uid - идентификатор юзера; login; password; email; fname - имя; org - организация; telephone.

Balance: uid; usd - баланс.

Banners: bid - id баннера, uid, link - адрес, куда ведет баннер, src - адрес, по которому хранится сам баннер, tablename - имя таблицы, где хранится статистика по баннеру, type - "тип" баннера.

Types: type - "тип" баннера, price - цена за 1000 показов.

Динамически, после добавления каждого баннера, будет создаваться таблица, в которой хранится статистика по баннеру - количество кликов и показов.

После создания всех таблиц (sql-запросы для этого ты найдешь на диске или http://nikitos.inc.ru), самое время определить для себя структуру системы. Мне она представляется следующим образом.

1) show.inc.php - в нем описаны функции взаимодействия с посетителями сайта: showbanner(pid) - показывает баннер номер pid, click(pid) - осуществляет редирект по баннерной ссылке.

Назад на стр. 053-088-2  Содержание  Вперед на стр. 053-088-4