Лысенко С.В.
К.т.н. Нестерова Н.С.
Негосударственное частное образовательное учреждение высшего
профессионального образования Академия маркетинга и социально-информационных
технологий (ИМСИТ) г. Краснодар, Россия
Оптимизация нагрузки сайта
Широкое внедрение информационных технологий во
все сферы жизни общества привело к значительному росту пользователей Интернета.
При этом четко прослеживается тенденция перехода с коммутируемого доступа на безлимитный.
Сайты усложняются по наполнению и пользователям важно, чтобы время ожидания
загрузки страницы не было большим.
Исследованием 2004 года [1] было установлено,
что допустимое время ожидания для неработающих ссылок (без обратной связи)
находится в диапазоне 5 - 8 секунд. При наличии уведомления пользователя о
процессе загрузки (обратной связи) время ожидания увеличивается до 38 секунд.
Опрос, проведенный в 2007 году [2] показал, что
33% пользователей скоростного соединения не согласны ждать загрузки страницы
более 4 секунд, а 43% более 6 секунд. Следовательно, пользователь покидает
сайт, если в течение 5–10секунд видит белый экран в браузере.
Очевидно, что для 95% пользователей время
ожидания ответа от неработающего сайта не превышает 8 секунд, а число
пользователей, ждущих более 10 секунд, стремится к нулю.
Увеличение времени загрузки чревато
экономическими потерями. Так, в 2006 году
компания Google (http://www.google.com/) столкнулась с уменьшением
трафика и доходов от рекламы на 20% в связи с увеличением времени загрузки для
страницы с 10 поисковыми результатами на 0,4 секунды и страницы с 30
результатами на 0,9 секунд. Тогда же
уменьшение в объеме главной страницы Google Maps (http://maps.google.com/) с
100 Кб до 70-80 Кб, привело к увеличению трафика на 10% в течение первой недели и еще на 25% в последующие
три [3].
Тестирование в 2007 году для Amazon.com [4]
показало: каждые 100 мс увеличения времени загрузки уменьшали продажи на 1%.
Аналогичные результаты получены Live Search
(http://www.live.com/) [5]. Замедление
загрузки страниц на 1 секунду привело к тому, что количество сброшенных
поисковых запросов возросло на 1%, а число кликов по рекламе уменьшилось на
1,5%. Когда длительность загрузки страницы возросла еще на 2 секунды, количество сброшенных поисковых запросов
увеличилось на 2,5%, а число кликов по
рекламе уменьшилось на 4,4%.
Очевидно, пользователей сайта привлекает большая
скорость загрузки, считается, что такие сайты интереснее.
Таким образом можно сделать вывод о том, что
задача оптимизации производительности системы, предполагающая уменьшение скорости
генерации страницы либо уменьшение времени отдачи страницы, является
своевременной и актуальной.
При этом следует отметить, что решение указанной
задачи связано с уменьшением нагрузки, которая представляет собой степень
использования ресурсов сервера в момент выполнения задачи.
Разным задачам необходимо больше или меньше
оперативной памяти, ресурсов процессора, дисковой активности.
Обычно нагрузка повышается из-за того, что для
генерации одной страницы сайта требуется проведение большого цикла обработки
данных.
Другая
причина этого явления - неоптимизированные скрипты с неэффективным алгоритмом
выполнения (неудачные методики расчетов, лишние циклы, ведение логов, к которым не будут обращаться
т.д). Поисковые роботы также повышают нагрузку на аккаунт, запрашивая по
очереди или одновременно каждую страницу сайта в процессе обновления своей
поисковой базы.
Один из вариантов оптимизации функционирования
системы – использование выделенного сервера, на котором не находятся сайты
других пользователей , в отличии от виртуального хостинга, где приходится распределять ресурсы сервера с другими
пользователями в зависимости от нужд, выполняемых в данный момент скриптов,
перераспределяя их в пользу сайтов с высокой посещаемостью или тех, для
генерации страниц которых необходимы
сложные вычисления либо обработка больших массивов информации. Но это не всегда
помогает. Таким образом возникает необходимость
отслеживания нагрузки для принятия необходимых мер.
Анализ нагрузки сайта предполагает: просмотр
логов, аудит кода, просмотр данных о нагрузке из панели управления и сравнение
этих данных с логами, профилирование (изучение времени выполнения небольших
участков кода и количества вызовов функций).
Простейшая оптимизация заключается в выполнении анализа по следующим направлениям: организация запросов к базе данных, способ хранения данных, использование кэширования, алгоритмы обработки данных, настройка окружения( Apache/Nginx, MySQL/PostgreSQL, PHP/Python).
Как известно, существуют 2 типа
оптимизации: клиентская и серверная.
По данным исследования Akamai за последние 5 лет
средний размер веб-страниц вырос втрое, а по данным webo.in за последний год —
в полтора раза. При этом каждая страница использует в среднем по 50 объектов,
что крайне негативно сказывается на общем времени загрузки. Причем, только
5-10% от общего времени загрузки приходится на серверную часть. Все остальное
на клиентскую.
Основная задача клиентской оптимизации
заключается в увеличении скорости загрузки страницы.
Различные авторы рекомендуют следующие
способы ее увеличения:
·
использование
сжатия;
·
минимизация
HTML;
·
минимизация
размера верстки;
·
помещение
всех стилевых инструкций в CSS, а Javascript во внешние файлы;
·
клиентское
кеширование;
·
сжатие
и склеивание;
·
организация
медиа-контента, а именно: применение формата GIF для создания картинки малого
размера, JPEG для многоцветных фотографий, PNG только в крайних случаях,
например, если необходима градиентная прозрачность;
·
склеивание
всех мелких картинок на одной странице в один большой файл и отображение их
путем использования стилей (в частности background-image и
background-position).
·
использование
инструментов YSlow! от Yahoo; Page
Speed от Google;
·
использование
CDN;
·
выполнение
вычислений на стороне клиента.
Серверная оптимизация предполагает:
· оптимизацию настроек веб-сервера APACHE;
· HTTP-сжатие;
· кеширование статических ресурсов;
· сжатие текстовых файлов;
· постраничный
и групповой редиректы;
· сохранение файлов вместо открытия;
· настройку ЧПУ (человеку понятных URL) ;
· оптимизацию кода;
·
оптимизацию
БД.
Для сайта, статистика которого отражена на рисунках 1 и 2 была выполнена работа по оптимизации.
Из графиков видно, что максимальная нагрузка приходится на сайт в дневные и вечерние часы. Для рассматриваемого сайта в такие моменты нагрузка на сервер близка к критической.

Рисунок 1 – Количество просмотров и посетителей сайта в период с января по апрель 2013г

Рисунок 2 – Распределение нагрузки на сайт по времени суток
В связи с этим были
приняты определенные меры по оптимизации с целью уменьшения нагрузки на сервер
и увеличения пропускной способности сайта. Использованные методы приведены в
таблице 1
Таблица 1 – Методы оптимизации
|
Метод оптимизации |
Размер страницы, Кб |
Уменьшение времени генерации страницы, мс |
Уменьшение времени отдачи
страницы. мс |
Число запросов к ФС |
Число Sql зап росов |
|
Серверная оптимизация |
|||||
|
Серверное кеширование |
- |
-289 |
- |
- |
- 13 |
|
Вычисления на стороне
клиента |
- |
-563 |
- |
- |
-2 |
|
Оптимизация кода |
- |
-245 |
- |
- |
-12 |
|
Оптимизация sql запросов |
- |
- 375 |
- |
- |
-3 |
|
Индексация БД |
- |
-415 |
- |
- |
-3 |
|
Клиентская оптимизация |
|||||
|
Сжатие |
-140 |
- |
-20 |
- |
- |
|
Минимизация html,css,js |
-3 |
- |
-143 |
- |
- |
|
Склеивание файлов |
-1 |
-205 |
-20 |
- 3 |
- |
|
Сжатие медиа контента |
-46 |
- |
-330 |
- |
- |
|
CSS спрайты |
+3 |
-20 |
+3 |
-17 |
- |
|
data:URI |
-13 |
- |
-47 |
-13 |
- |
|
CDN |
-56 |
- |
-20 |
-3 |
- |
|
Клиентское кеширование |
- |
- |
-305 |
-13 |
- 13 |
|
Кеширование sql запросов |
- |
- 255 |
- |
- |
-42 |
|
Итого |
214 |
743 |
323 |
40 |
90 |
Результаты выполненной работы следующие.
Сведения о странице
до оптимизации
Размер
470 Кб
Время
генерации страницы 3120 мс
Время
загрузки страницы 1205 мс
Запросов
к ФС: 89
Sql запросов: 178
Среднее
время ожидания: 2163 мс
после оптимизации
Размер
214 Кб
Время
генерации страницы 743 мс
Время
загрузки страницы 323 мс
Запросов
к ФС: 40
Sql запросов:90
Среднее
время ожидания: 533 мс
Статистика сервера до оптимизации и после показана на рисунках 3 и 4.

Рисунок 3 – Потребление ресурсов процессора и загрузка оперативной памяти до оптимизации

Рисунок 4 – Потребление ресурсов процессора и загрузка оперативной памяти после оптимизации
В результате можно сделать вывод о том,
что проведенная работа позволила существенно повысить производительность
сервера и поддерживать его в эффективном, стабильном состоянии.
Список использованных источников и литературы
1. Nah, F., "A study on tolerable waiting time: how long are Web users
willing to wait?", Behaviour & Information Technology 23, #3 (2004):
153–163. [Электронный
ресурс] Режим доступа : http://web.mst.edu/~nahf/
2. Akamai. June 2006. "Retail Web Site Performance: Consumer Reaction
to a Poor Online Shopping Experience.", Akamai
Technologies [Электронный ресурс] Режим
доступа : http://www.akamai.com/
3. Farber, D., "Google's Marissa Mayer: Speed Wins,", CNET Between the Lines blogs.zdnet.com/BTL/?p=3925
4. Kohavi, R. и R. Longbotham, "Online Experiments: Lessons Learned,",
Computer 40, #9 (2007): 103–105. home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt.
5. Kohavi, R., "Practical Guide to Controlled Experiments on the Web:
Listen to Your Customers not to the HiPPO" exp-platform.com/Documents/2007-10EmetricsExperimenation.pdf