Шаг 1: Определение ключевых метрик и инструментов (10 минут). Решите, что именно вы хотите отслеживать. Базовый набор для Leaflet-приложения включает:
- **Производительность загрузки:** время до полной отрисовки карты (Map Tiles Loaded).
- **Стабильность работы:** количество ошибок JS, связанных с Leaflet (тайлы, слои).
- **Поведение пользователя:** клики по карте, использование элементов управления (зум, слои).
- **Ресурсы:** потребление памяти (актуально для long-lived SPA с динамически добавляемыми/удаляемыми слоями).
Шаг 2: Инструментирование кода для отслеживания загрузки карты (15 минут). Самая важная метрика — карта готова к использованию. Leaflet генерирует событие `'load'` когда все видимые тайлы загружены.
```javascript
// В вашем коде инициализации карты, после L.map(...)
map.on('load', function() {
// Отправляем метрику в Google Analytics 4
gtag('event', 'map_loaded', {
'load_time': performance.now() // Время от начала загрузки страницы
});
// Или используем Performance API для более точного измерения
const perfEntry = performance.getEntriesByName('your-map-container')[0];
console.log(`Карта загружена за: ${perfEntry.duration} мс`);
});
```
Чтобы это работало, убедитесь, что вы создали пользовательский показатель `map_loaded` в интерфейсе GA4.
Шаг 3: Настройка отслеживания ошибок (10 минут). Необработанные ошибки Leaflet (например, сетевые ошибки загрузки тайлов) могут «ломать» карту. Перехватите их с помощью Sentry.
```javascript
// Инициализация Sentry (скрипт должен быть подключен)
Sentry.init({ dsn: 'YOUR_DSN' });
// Глобальный обработчик ошибок (перехватит и ошибки из Leaflet)
window.addEventListener('error', function(event) {
if (event.message.includes('Leaflet') || event.filename.includes('leaflet')) {
Sentry.captureException(event.error);
}
});
// Также можно перехватывать ошибки загрузки тайлов через обработчик события 'tileerror'
map.on('tileerror', function(error) {
Sentry.captureException(new Error(`Tile load error: ${error.tile.src}`));
});
```
Это поможет быстро получать уведомления о проблемах с тайл-серверами или сетью у пользователей.
Шаг 4: Регистрация действий пользователя (10 минут). Поймите, как пользователи взаимодействуют с картой. Настройте отправку событий в GA4 при ключевых действиях.
```javascript
// Отслеживание клика по карте (получение координат)
map.on('click', function(e) {
gtag('event', 'map_click', {
'latitude': e.latlng.lat,
'longitude': e.latlng.lng,
'zoom_level': map.getZoom()
});
});
// Отслеживание изменения зума
map.on('zoomend', function() {
gtag('event', 'map_zoom', {
'new_zoom_level': map.getZoom()
});
});
// Отслеживание переключения слоев (если у вас есть control layers)
map.on('baselayerchange', function(e) {
gtag('event', 'layer_switch', {
'layer_name': e.name
});
});
```
Эти данные покажут, какие области карты наиболее популярны и как часто используются функции.
Шаг 5: Контроль за потреблением памяти (10 минут). Динамическое добавление и удаление тысяч маркеров или GeoJSON-слоев может вызвать утечку памяти. Простой мониторинг можно организовать с помощью Performance API.
```javascript
// Функция для логирования использования памяти (работает не во всех браузерах)
function logMemoryUsage() {
if (performance.memory) {
const usedMB = performance.memory.usedJSHeapSize / 1024 / 1024;
console.log(`Используется памяти: ~${Math.round(usedMB)} MB`);
// Можно отправлять это значение раз в минуту, если оно растет
}
}
// Вызывать периодически или после массовых операций с картой
setInterval(logMemoryUsage, 60000); // Раз в минуту
```
Для серьезного отслеживания утечек используйте Memory Profiler в Chrome DevTools, но этот код даст сигнал о явных проблемах.
Шаг 6: Создание дашборда и настройка оповещений (5 минут). Собранные данные бесполезны, если на них не смотреть.
- В **Google Analytics 4** создайте отчет «События», чтобы видеть частоту `map_click`, `map_zoom`.
- В **Sentry** настройте уведомления в Slack/Telegram/Email на новые критические ошибки, связанные с Leaflet.
- Для метрики времени загрузки (`map_loaded`) установите базовый порог (например, 3 секунды) и отслеживайте его увеличение.
Комментарии (6)