Замеры скорости загрузки вебсайтов

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

Для того, чтобы что-то оптимизировать, нужно это замерить. В измерениях нам поможет инструмент под названием sitespeed.io.

В упрощённом варианте можно использовать всего 2 машины - 1 сервер и 1 клиент. Машины нужны изолированные, так как на измерения клиента не должны влиять операции на сервере.

Если потребуется, можно нарастить количество клиентов.

Серверная сторона

Требования

  • docker
  • docker-compose
  • возможность откытия дополнительных портов.

Сервер состоит из СУБД graphite для хранения измерений и интерфейса grafana для их отображения.

Содержимое файла docker-compose.tmpl

version: '2'
services:
    graphite:
        image: sitespeedio/graphite
        container_name: sitespeed-graphite
        network_mode: "bridge"
        restart: always
        ports:
            - 2003:2003
    grafana-bootstrap:
        image: sitespeedio/grafana-bootstrap
        container_name: sitespeed-grafana-bootstrap
        network_mode: "bridge"
        depends_on:
            - grafana
        links:
            - grafana
        environment:
            - GF_PASSWORD=**                    # заменить на пароль
            - GF_USER=*                         # заменить на имя пользователя
    grafana:
        image: grafana/grafana
        container_name: sitespeed-grafana
        network_mode: "bridge"
        depends_on:
            - graphite
        links:
            - graphite
        environment:
            - GF_SECURITY_ADMIN_PASSWORD=**     # заменить на пароль
            - GF_SECURITY_ADMIN_USER=*          # заменить на имя пользователя
            - GF_AUTH_ANONYMOUS_ENABLED=true
            - GF_USERS_ALLOW_SIGN_UP=false
            - GF_USERS_ALLOW_ORG_CREATE=false
        ports:
            - 80:3000

Входящие соединения с клиентов на порт 2003 прокидываются в контейнер с graphite.

Первичный запуск с инициализацией стандартных панелей sitespeed в grafana:

    - docker-compose up -d
    - docker-compose run --rm grafana-bootstrap

Клиент

Требования

  • docker

Пример запуска сбора данных в crontab раз в 10 минут

*/10 * * * * docker run -v /etc/sitespeed.io/urls.txt:/sitespeed.io/urls.txt sitespeedio/sitespeed.io urls.txt --graphite.host=[хост с сервером]  -n 1 --speedIndex false --video false -c 3g >> /tmp/sitespeed.log

Файл urls.txt содержит список страниц, которые нужно проверить:

https://yandex.ru
https://мой-быстрый-сайт.рф

Соединение должно быть фиксированным (-c 3g означает иммитацию 3G), чтобы снизить зависимость измерений от сетевых проблем.

Несколько клиентов

Если проект развивается и появилась возможность мониторить время загрузки страниц с разных провайдеров, сетей, географических зон, добавьте в crontab клиента

--graphite.namespace sitespeed_io.perm

В этом примере perm означает, что замеры производятся в городе Пермь.