Быстродействие

Задача

Оптимизировать сайт для ускорения работы.

Решение

Что можно сделать, чтобы сайт работал быстрее:

Полезные ссылки

Анализ времени загрузки страниц

Задача

Проанализировать скорость загруузки страниц сайта.

Решение

Для анализа скорости загрузки можно использовать:

Варианты

  • Плагин к FireFox: YSlow
  • Он-лайн проверка сайта: webo.in

Плагин к FireFox: YSlow

Анализирует текущую страницу в браузере и выдаёт рекомендации на английском по уменьшению скорости загрузки.

Cкачать плагин можно с официальной страницы на Yahoo! или со страницы плагина на mozilla.org.

Он-лайн проверка сайта: webo.in

Русский ресурс.
Есть описание алгоритма анализа и рекомендации по оптимизации.
Анализировать сайт: http://webo.in/

Полезные ссылки

Анализ работы сайта "под нагрузкой"

Задача

Стресс-тест сайта, чтобы проверить работу сайта под большой нагрузкой (большое количество посетителей).

Решение

Варианты

Использованные материалы

Тестирование веб-приложений - эмулятор интернет-канала Sloppy.

Анализ скорости загрузки сайта при разной скорости канала клиента

Задача

Проверить сайт на разных скоростях загрузки (модемная линия, выделеная и др.)

Решение

Варианты

  • Эмулятор интернет-канала Sloppy
  • Локальный прокси-сервер, который может ограничивать скорость "закачки" для пользователей
  • Сервер nginx
  • программа Tmeter
  • программа Netlimiter
  • WANem
  • SpeedLimiter

SpeedLimiter

Страница проекта: http://www.delight.ch/

WANem

Еще неплохая вещь для эмуляции плохого канала - WANem.
Умеет задавать задержки в сети, процент потерянных пакетов и т.п.
Не заточена под WEb-QA, но вдруг кому пригодится). Бесплатная.

Локальный прокси-сервер, который может ограничивать скорость "закачки" для пользователей

Для денвера и локальных проектов достаточно локального же прокси-сервера, позволяющего регулировать скорость "закачки" для пользователей. Например, CCProxy ... условно бесплатный, для тестирования «бесплатных» возможностей хватает с головой.

Сервер nginx

http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#limit_rate - довольно удобно, вкупе с другими директивами можно настроить тестирование весьма и весьма безо всяких дополнительных программ.

эмулятор интернет-канала Sloppy

http://www.dallaway.com/sloppy/

Можно тестировать с локального компьютера.

Архитектурно, Sloppy это прокси-сервер, который эмулирует доступ к указанному сайту через канал с задаваемой полосой пропускания - от модемного 9.6 Кб, до выделенки 512 Кб. Вопрос, почему только такой маленький верхний порога скорости, ведь каналы в 1 Мб и более уже достаточно широко распространены. Скорее всего подразумевается, что если скорость 1 Мб или больше, то любой проект будет загружаться настолько быстро, что тестировать не имеет смысла, хотя я склонен и поспорить в этом случае - есть проекты, у которых даже такой канал вызовет если не задержки, то просто медленный процесс загрузки и связано это не столько с каналом, сколько с остальными расходами, поэтому протестировать все же хотелось бы и на таких клиентах.

Из доступных настроек у нас есть: адрес сайта, который будем тестировать, выбор скорости (из сетки 9.6, 14.4, 28.8, 56, 128, 256 и 512 Кб), а также порт, по которому мы будем получать страницу. Кстати, ввиду своей "прокси-природы", его можно использовать как для теста локального проекта, так и любого проекта в сети. Конечно, в этом случае нужен доступ в интернет, тогда как просто для теста локального сервера этого совсем не требуется (ну разве что для загрузки пакета).

После задания параметров и старта, браузер открывает локальный адрес 127.0.0.1 на том порту, что вы указали в опциях (по-умолчанию, 7569) и открывает указанный вами сайт.

Настройка sloopy

Использованные материалы

Тестирование веб-приложений - эмулятор интернет-канала Sloppy.

Кеширование

Задача

Необходимо ускорить работу сервера путём кеширования.

Решение

Варианты

  • Кеширование блоков
  • Общее кеширование
  • Кеширование для анонимных пользователей, которые не изменяют ничего на сайте.

Использованные материалы

Drupal caching with Cache Router

Полезные ссылки

Кеширование блоков

Задача

Необходимо ускорить работу сайта для зарегистрированных пользователей.

Решение

Варианты

  • Модуль Block Cache - кеширование блоков
  • Использовать кеширование Друпала - написать собственные функции для кеширования

Модуль Block Cache

Страница проекта: Block Cache.

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

Модуль Block Cache работает по каждому блоку отдельно, этим достигается потрясающая настраиваемость. Кэшированные блоки появляются рядом с обычными с пометкой "[[-CACHED-]]". Для того, чтобы включить кэширование тех или иных блоков, необходимо отключить основной и включить кэшированный. При этом также задаются вес блока "жизнь кэша" в секундах, можно указать, при каком действии кэш должен обновляться и тд.

Недостатки:

модуль заменяет имена блоков на цифры в стилях. То есть вместо

<div class="block menu">

будет
<div class="block blockcahe-3">

Если стили были привязаны именно к названию блока, а не к номеру, то это может разрушить дизайн...

Использованные материалы

Полезные ссылки

Оптимизация структуры базы данных

Задача

Увеличить быстродействие базы данных.

Решение

Варианты

Вывод

Использованные материалы

Полезные ссылки

Improve table indices for common queries

Сжатие трафика

Задача

Ускорить загрузку файлов CSS и JS за счёт сжатия на сервере и передачи сжатой копии браузеру.

Решение

Варианты

  • Автоматическое сжатие сервером
  • Создать вручную архивную копию каждого JS/CSS и отдавать их вместо не сжатых файлов.
  • Использовать mod_deflate
  • Использование веб-сервера nginx для сжатия трафика

Автоматическое сжатие сервером

В файле .htaccess нужно прописать:

<IfModule mod_gzip.c>
      mod_gzip_on                   Yes
      mod_gzip_item_include         file       \.js$
      mod_gzip_item_include         file       \.css$
</IfModule>

Создать вручную архивную копию каждого JS/CSS и отдавать их вместо не сжатых файлов.

Нужно вручную все эти файлы упаковать и загрузить на сервер. Одно радует их количество не стремится к бесконечности... С другой стороны нет нагрузки на сервер для создания упакованной копии этого файла. А меняются эти файлы не так уж и часто...

Упаковать *.js файлы в *.js.gz и закачать на сервер в ту же папку, где был оригинальный JS-файл.

В файле .htaccess (в корне сайта) сразу после RewriteEngine on добавить:

    RewriteRule ^(.*\.js\.gz)$ - [L]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{REQUEST_FILENAME}.gz -f
    RewriteRule ^(.*)$ $1.gz

Проверка правильности работы

Загрузить в браузере страницу и посмотреть заголовки запроса:

  • Response Headers
  • Date Wed, 19 Mar 2008 12:32:09 GMT
  • Server Apache
  • Cache-Control max-age=1209600
  • Expires Wed, 02 Apr 2008 12:32:09 GMT
  • Last-Modified Wed, 19 Mar 2008 12:31:38 GMT
  • Etag "bdcf97-87d-47e107aa"
  • Accept-Ranges bytes
  • Content-Length 2173
  • Connection close
  • Content-Type application/x-gzip
  • Content-Encoding gzip

Размер полученного файла должен стать меньше...

Принцип работы

Решение о том, какой файл (сжатый или нет) отдать клиенту принимает mod_rewrite:

Принцип работы:
Если рядом с файлом javascript.js будет находиться его сжатая копия javascript.js.gz и в запросе будет явно указано, что клиент поддерживает gzip-encoding, то клиенту выдаётся сжатая копия. Если сжатие не поддерживается или сжатого файла нет в ответ вернётся оригинальный файл.

В результате трафик сервера и нагрузка на сервер снижается. То же самое можно сделать и для CSS.

Использовать mod_deflate

Krotty@drupal.org предложил:
mod_deflate в стандартной поставке apache 2.x :)

Использование веб-сервера nginx для сжатия трафика

VLAD_X предложил использовать nginx.
Он может просто сжимать статику на лету, а может в точности делать то, что вы хотите: отдавать сжатые файлы вместо несжатых. (Эта возможность появилось недавно в 0.6.x ветке)

Использованные материалы

Полезные ссылки

mod_gzip - сжатие html страниц `на лету`

Сокращение количества запросов к серверу

Задача

Уменьшить количество обращений к веб-серверу.

Решение

Каждый файл (JavaScript, картинка, таблица стилей или внедрённый объект) вызывыются браузером после того, как он тщательно изучил HTML-документ, который ему предоставил сервер.

На каждый файл по одному запросу. Если таких файлов много, что и запросов будет много. Чтобы сократить количество запросов можно использовать модуль, который собирает все таблицы стилей и/или js-скрипты в один файл.

Варианты

  • Модуль JavaScript Aggregator

Модуль JavaScript Aggregator

Описание и настройка модуля JavaScript Aggregator

Вывод

Использованные материалы

Полезные ссылки