Bannerbank за 24 часа

Nikita Kislitsin

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


(nikitoz@real.xakep.ru)

http://nikitos.inc.ru

Знаешь, во что рано или поздно утыкается любой серьезный проект? В деньги. Энтузиазма на безвозмездную работу над сайтом уже не хватает, каждый месяц надо отдавать деньги за хостинг, а бросить все к ядреной матери мешает уже потраченное время и мысли, вроде: "Я что - идиот?! Потратил полгода жизни - и все для чего, для того, чтобы забить на проект и вспоминать с сожалением о недостигнутом успехе?". Нет уж, дорогой, с сайта надо зарабатывать деньги, подбадривая себя более оптимистичными размышлениями: "Вот допишу эту баннерную систему и буду деньги лопатой грести, куплю 250-литровую бочку Гиннеса, BMW Z3, виллу на Кипре, боевой вертолет и покажу америкосам, где раки зимуют!". Понеслась? :)

Упор лежа

Не подумай ничего плохого - я не собираюсь рассказывать тебе в третий раз, как работать с базами данных :). Это мы уже умеем. В сегодняшнем материале я бы хотел осветить важный аспект веб-, да и, впрочем, любого программирования - производительность разработанных сценариев. Тут все, конечно же, неоднозначно и зависит от множества факторов - и от производительности сервера, и от установленной на нем системы, и от выполняемых операций, и от структуры самого алгоритма, и от параметров окружения сценария. Факторов много, на половину из них ты можешь повлиять лишь косвенно - доставая сисадмина бесконечным спамом в его mailbox, но оставшиеся 50% полностью висят на твоей совести. Чем чреваты сценарии с низкой производительностью, и как вообще определить скорость работы того или иного скрипта? Ну, скажем, если речь идет о сайте с посещаемостью 10 человек в сутки, то нет никакого смысла возиться с алгоритмами, выигрывая эти жалкие 10-30%. Однако же, если речь идет, например, о серьезном коммерческом проекте, результат отказа созданной системы повлечет за собой нечто ужасное. Выигранные 20% будут очень кстати - это уже секунды процессорного времени, мегабайты памяти, сотни пользователей, которым не было отказано в обслуживании, т.е. в итоге выигранные деньги. Особенно актуальна эта проблема в нашем сегодняшнем примере - баннеропоказной системе. Ведь если вдруг перестанут показываться баннеры партнеров и заказчиков, ничего хорошего ждать не придется. Кроме того, в подобных системах большая нагрузка не редкость, а реалии жизни. Конечно, интерпретируемый пхп не сможет сравниться по скорости, скажем, с компилируемым cpp-приложением для вебсервера, но отказываться от прибавки в 10-30% было бы глупо.

Метод измерения производительности сценария прост. Вычисляется время, за которое программа выполнила некоторый блок кода. Например, прошла цикл, обработала sql-запрос или нашла нужный элемент в массиве. Это, конечно, не точный способ, ведь время обработки сценария зависит от внешней загрузки системы - величины динамической и никак не связанной с рассматриваемым приложением. Поэтому я буду рассматривать три измерения полученных значений, отличающиеся друг от друга не более чем на 15%, и принимать за результат их среднее арифметическое.

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