|
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) - осуществляет редирект по баннерной ссылке. |