Прежде чем решить любую проблему, необходимо определить, из-за чего эта проблема возникла.
Нередко к нам обращаются клиенты, которые жалуются на медленную загрузку своих веб-сайтов и просят провести
тестирование производительности. На данный запрос мы обычно отвечаем следующее: в первую очередь, нужно провести тестирование клиентской части приложения. Определив и устранив все узкие места в этой области, можно переходить к тестированию производительности.
Тестирование клиентской части и производительности – в чем разница?
Каждое веб-приложение состоит из клиентской и серверной части. Клиентская часть, или фронтенд, реализует пользовательский интерфейс, формирует запросы к серверу и обрабатывает ответы, полученные от сервера.
Серверная часть, или бэкенд, получает запрос от клиента, выполняет вычисления, обращается к базе данных и формирует веб-страницу, запрошенную пользователем. Далее страница отправляется пользователю, например, по HTTP-протоколу.
За низкую скорость отображения страниц может отвечать и сервер, но чаще всего проблемы обнаруживаются на клиентской стороне. По своей сути тестирование клиентской части – это функциональное тестирование, объектом которого выступает интерфейс пользователя.
Тестирование бэкенда или серверной части помогает найти ответы на следующие вопросы:
- Как быстро браузер отобразит страницу?
- Сколько времени занимает доставка ответа от сервера к пользователю?
- Необходимо ли оптимизировать контент приложения?
- Корректно ли работает кэширование?
- Есть ли какие-то проблемы с подгружаемыми ресурсами?
Что мы рекомендуем для оптимизации фронтенда?
- Использовать сжатие контента;
- Включить серверное и клиентское кэширование;
- Избавиться от неиспользуемых данных, которые подгружаются подзапросом. Например, в приложении есть 10 библиотек JavaScript, а используется только одна;
- Правильно настраивать файлы-cookie;
- Статистические данные хранить на отдельном CDN-сервере. Так, если вынести изображения на отдельный сервер, пользователь из России будет получать картинки не с сервера, расположенного в США, а с ближайшего географически. Соответственно, время на загрузку сократится;
- Упрощать и оптимизировать JavaScript на стороне клиента.
Логично, что нет смысла проводить нагрузочное тестирование, до тех пор, пока не была произведена оптимизация на стороне клиента. Сервер может быть быстр как ветер, но сайт будет работать медленно, тем самым негативно влияя на пользовательский опыт.
Тестирование производительности
Это проверка работы серверной части приложения. Тестирование бэкенда производится, минуя графический интерфейс пользователя. Нагрузка подается на сервер в обход клиентской части отправкой прямых запросов на сервер. Профессиональная команда также может написать скрипты, которые «запомнят» работу интерфейса. Так, возможно сымитировать работу большого числа пользователей и проверить, насколько хорошо серверная часть будет справляться при заданной нагрузке.
После проведения данного типа тестирования вы узнаете ответы на следующие вопросы:
- Как быстро работает приложение?
- Сколько пользователей оно может выдержать?
- Возможно ли оптимизировать производительность на стороне сервера?
- Есть ли какие-то проблемы, которые проявляются под нагрузкой?
- Можно ли масштабировать систему?
- Соответствует ли приложение требованиям производительности?
Существует несколько видов тестирования производительности и каждый из них позволяет найти ответы на конкретные вопросы. Ниже рассмотрим каждый вид в отдельности.
Стресс-тестирование
Этот вид тестирования, как правило, проводится первым и помогает рассчитать максимальную нагрузку, которую приложение способно выдержать. Данная проверка особенно актуальна, когда планируется резкое увеличение посетителей или транзакций на сайте. Для интернет-магазинов это могут быть дни предпраздничных распродаж.
Нагрузочный тест
Во время нагрузочного тестирования нагрузка на систему подается в течение 4-8 часов. В это время собираются всевозможные метрики производительности и проходят проверку на соответствие заданным требованиям.
В результате вы получаете ответ на вопрос: соответствует ли приложение заявленным требованиям производительности?
Объёмное тестирование
Данный вид проверок помогает узнать, как приложение будет работать при больших объемах данных. Так вы узнаете, как изменится производительность продукта, если аудитория приложения вырастет в несколько раз.
Тестирование отказоустойчивости
В данном случае продолжительность нагрузки может варьироваться в зависимости от целей и возможностей проекта, доходя до семи дней и более. В результате получаем представление о том, как изменится производительность системы в течение длительного периода времени под нагрузкой, например, в течение недели. Снизится ли уровень производительности? Способно ли приложение выдерживать стабильную нагрузку без критических сбоев?
Тестирование масштабируемости
Позволяет узнать, как изменится (если изменится) производительность приложения, если добавить дополнительные аппаратные ресурсы.
Все дело в нагрузке
Итак, тестирование клиентской части и тестирование производительности – это два разных вида тестирования. И ключевое различие состоит в нагрузке. Если вам необходимо выяснить, почему при использовании одним пользователем страницы сайта не грузятся – необходимо провести тестирование клиентской части. Оно также поможет проверить, как будет загружаться сайт у пользователя, скажем, с Майорки.
А вот если вам важно знать, как будет вести себя сайт при 1000 пользователей из Лондона и с Майорки, работающих с ресурсом в одно и то же время, тогда это вопрос к тестировщикам производительности. Они смогут правильно подать нагрузку, учтут важные метрики и дадут рекомендации, внедрение которых позволит усовершенствовать работу вашего веб-сайта.