Шаг 1: Определение целей и метрик (10 минут). Прежде чем настраивать инструменты, решите, что именно вы хотите мониторить. Для Leaflet-приложения ключевыми являются:
- Доступность карты: Загружается ли карта вообще? (HTTP-статусы тайлов, скрипта Leaflet, базовых слоев).
- Производительность отрисовки: Сколько времени занимает загрузка тайлов, отрисовка слоев, реакция на действия пользователя (зум, панорамирование).
- Функциональность: Работают ли ключевые элементы: маркеры, popup, кастомные контролы, поиск?
- Ресурсы: Не возникает ли утечек памяти при долгой работе с картой (особенно важно в SPA).
- Пользовательский опыт: Где пользователи чаще всего сталкиваются с ошибками или замедлениями?
- Для синтетического мониторинга (проверки извне): Используйте бесплатные тарифы UptimeRobot или Pingdom для проверки доступности публичной страницы с картой.
- Для мониторинга в реальном браузере пользователя (RUM, Real User Monitoring): Подключите Google Analytics 4 с отслеживанием скорости загрузки или, что лучше, бесплатный план Sentry для отлова ошибок JavaScript.
- Для метрик производительности: Воспользуйтесь встроенным браузерным API `PerformanceObserver` и `Navigation Timing API`. Этого хватит для начала.
```
// Мониторинг загрузки скрипта Leaflet
const leafletScript = document.querySelector('script[src*="leaflet"]');
if (leafletScript) {
leafletScript.onerror = function() {
console.error('Leaflet script failed to load');
// Отправить событие в Sentry/GA4
if (window.sentryClient) sentryClient.captureMessage('Leaflet JS load failed');
};
}
// Мониторинг загрузки базового тайлового слоя (например, OpenStreetMap)
const mapInitStartTime = performance.now();
// Инициализация карты после того, как она создана
window.addEventListener('load', function() {
if (window.myMap) {
const mapInitTime = performance.now() - mapInitStartTime;
console.log(`Map initialized in ${mapInitTime}ms`);
// Отправка метрики
}
});
```
Настройте в UptimeRobot проверку URL вашей страницы с картой на наличие ключевого слова, например, "leaflet-map", что подтвердит, что скрипт выполнился.
Шаг 4: Отслеживание производительности операций с картой (15 минут). Замерьте время критических действий пользователя. Оберните ключевые события:
```
// Замер времени загрузки тайлов
let tilesLoaded = 0;
let totalTiles = 0;
const tileLoadStart = performance.now();
// Предполагаем, что myMap - это экземпляр L.Map
window.myMap.on('tileload', function() {
tilesLoaded++;
if (tilesLoaded === totalTiles) { // Нужно примерно рассчитать или установить событие 'load'
const tileLoadTime = performance.now() - tileLoadStart;
console.log(`All tiles loaded in ${tileLoadTime}ms`);
// Отправить метрику
}
});
// Замер производительности зума и перемещения
let zoomStartTime;
window.myMap.on('zoomstart', function() {
zoomStartTime = performance.now();
});
window.myMap.on('zoomend', function() {
const zoomTime = performance.now() - zoomStartTime;
if (zoomTime > 500) { // Логируем только медленные зумы
console.warn(`Slow zoom performed in ${zoomTime}ms`);
}
});
// Аналогично для 'movestart'/'moveend'
```
Шаг 5: Мониторинг ошибок и исключений (10 минут). Подключите Sentry (быстрая регистрация на бесплатном плане) для отлова всех ошибок JavaScript, включая те, что возникают внутри Leaflet.
```
// Вставьте скрипт Sentry в
Sentry.init({ dsn: 'YOUR_DSN_HERE' });
// Опционально: добавляем контекст
Sentry.setTag("map-library", "leaflet");
```
Теперь все ошибки, например, связанные с неверными координатами, недоступностью тайл-сервера или кастомными плагинами, будут фиксироваться с stack trace.
Шаг 6: Проверка на утечки памяти (5 минут). В development-режиме можно быстро проверить подозрительные утечки. После интенсивной работы с картой (добавление/удаление слоев, маркеров) откройте DevTools (Chrome) -> Вкладка Memory -> Сделайте heap snapshot. Сравните снимки до и после выполнения действий. Убедитесь, что вы удаляете слои через `map.removeLayer(layer)` и очищаете ссылки на объекты карты при уничтожении компонента в SPA-фреймворках.
Итог: За 60 минут вы настроили многоуровневый мониторинг: синтетические проверки доступности (UptimeRobot), отслеживание ошибок в реальном времени (Sentry), замер производительности ключевых операций (кастомный код с Performance API) и базовую проверку памяти. Это даст вам понимание состояния вашего картографического приложения и позволит оперативно реагировать на проблемы, прежде чем о них сообщат пользователи. В дальнейшем эту систему можно расширить, подключив более продвинутые RUM-решения вроде DataDog или Elastic APM.
Комментарии (8)