Этап 1 (0-15 мин): Инструментация кода и сбор базовых метрик производительности.
Начните с самого важного — времени загрузки карты и отзывчивости интерфейса. Вам не нужны тяжелые системы, для начала хватит консоли браузера и нескольких строк кода.
- Используйте Performance API браузера. Оберните код инициализации карты в измерение:
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
const mapLoadEnd = performance.now();
console.log(`Карта инициализирована за ${mapLoadEnd - mapLoadStart} мс`);
- Отслеживайте загрузку тайлов. Подпишитесь на события tileLayer:
}).on('tileloadstart tileload tileerror', function(e) {
console.log(`Тайл ${e.tile.src} статус: ${e.type}`);
}).addTo(map);
- Мониторьте взаимодействие пользователя. Замеряйте время между действием (клик, перемещение карты) и визуальным откликом (загрузка новых тайлов). Это можно сделать, засекая время события `movestart` и `load` у tileLayer.
Стабильность важнее скорости. Нужно знать, когда и почему что-то ломается.
- Глобальный перехват ошибок JavaScript. Установите обработчик `window.onerror` или `window.addEventListener('error', ...)`, который будет отправлять (пока в console.log) информацию об ошибках, связанных с Leaflet (например, проблемы с геоданными, отсутствие элемента DOM для карты).
- Логируйте ошибки загрузки тайлов. Событие `tileerror` уже подписано. Расширьте логику, чтобы фиксировать URL неудачного тайла и код ошибки. Частые ошибки 404 могут указывать на проблемы с поставщиком карт (tile server) или некорректно сгенерированные URL.
- Контроль памяти (качественно). В консоли разработчика Chrome (вкладка Performance) сделайте быструю запись (record) при активном использовании карты (зум, панорамирование). Обратите внимание на график памяти (Heap). Резкий рост или не снижение после действий может указывать на утечку, часто связанную с не удаленными обработчиками событий (event listeners) или слоями. Leaflet-специфичная команда `L.DomUtil.get('map')._leaflet_events` может помочь оценить количество подписок.
Переходим от реактивного к проактивному мониторингу.
- Определите ключевые пользовательские действия: «Время до первого отображения карты» (Map First Render), «Время полной загрузки начального вида» (Time to Initial Tiles Loaded). Замеряйте их с помощью `performance.mark()` и `performance.measure()`. Результаты можно отправлять на простой эндпоинт с помощью `navigator.sendBeacon()`.
- Создайте простейший синтетический тест. Напишите небольшой скрипт на Puppeteer или Playwright (это займет время, но базу заложить можно), который откроет страницу с картой, подождет загрузки и измерит те же метрики, что и в п.1. Запускайте его периодически (пока вручную) из разных локаций, если приложение глобальное.
- Отслеживайте использование функций. Простым счетчиком (отправляемым на сервер раз в минуту или при событии) фиксируйте, как часто пользователи включают/выключают слои (overlays), используют поиск, рисуют объекты. Это помогает понять, какие части приложения наиболее нагружены.
Собранные данные нужно визуализировать.
- Настройте отправку логов и метрик. Вместо `console.log` подготовьте функцию-обертку, которая отправляет данные на ваш бэкенд (например, на `/api/metrics`). Используйте `sendBeacon` для надежности, чтобы отправка не блокировала закрытие вкладки.
- Создайте простой бэкенд-эндпоинт (если его нет, можно использовать облачные функции AWS Lambda/Google Cloud Functions или даже записывать в файл). Его задача — принимать POST-запросы с метриками и сохранять их (в простейшем случае — в файл лога или базу типа SQLite).
- Панель наблюдения. За оставшееся время можно создать простейшую HTML-страницу, которая раз в 30 секунд опрашивает ваш бэкенд (или читает файл лога) и отображает ключевые цифры: среднее время загрузки карты за последние 5 минут, количество ошибок тайлов, количество активных сессий. Для простоты визуализации можно использовать библиотеку Chart.js для графиков.
Комментарии (8)