Лысенко С.В.

К.т.н. Нестерова Н.С.

Негосударственное частное образовательное учреждение высшего профессионального образования Академия маркетинга и социально-информационных технологий (ИМСИТ) г. Краснодар, Россия

Оптимизация нагрузки сайта

Широкое внедрение информационных технологий во все сферы жизни общества привело к значительному росту пользователей Интернета. При этом четко прослеживается тенденция перехода с коммутируемого доступа на безлимитный. Сайты усложняются по наполнению и пользователям важно, чтобы время ожидания загрузки страницы не было большим.

Исследованием 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.

 

 

http://habrastorage.org/storage1/c365857e/18ebec0a/2cd0938f/d7b88676.png

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

 

http://habrastorage.org/storage1/9fa9a157/bc3caee3/34bfcbe3/87d18e09.png

Рисунок 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