Real User Monitoring (RUM) в контексте фреймворка Fresh представляет собой механизм наблюдения за производительностью и поведением конечного пользователя на клиентской стороне. В отличие от традиционного мониторинга серверных метрик, RUM фокусируется на реальном опыте пользователя, собирая данные о времени загрузки страниц, задержках рендеринга, интерактивности элементов и других показателях, которые непосредственно влияют на UX.
Фреймворк Fresh интегрирует RUM через комбинацию серверных и клиентских инструментов, обеспечивая минимальное влияние на производительность благодаря использованию нативных возможностей Deno и оптимизированного рендеринга.
В Fresh сбор RUM-данных осуществляется с помощью легковесного скрипта, встроенного в HTML-страницу. Скрипт отслеживает ключевые события:
DOMContentLoaded – время полной загрузки DOM.load – завершение загрузки всех ресурсов страницы.first-paint и first-contentful-paint –
показатели визуальной загрузки.interaction – события пользовательских взаимодействий
(клики, скролл, ввод в формы).Данные собираются в JSON-объект, который асинхронно
отправляется на сервер через fetch в фоне, минимизируя
влияние на основную логику страницы. Fresh поддерживает SSR и
Islands Architecture, поэтому RUM-скрипт можно внедрять как в
статические страницы, так и в интерактивные компоненты.
На серверной стороне Fresh предоставляет возможность принимать RUM-данные через API-роуты, используя стандартные Deno handlers:
import { HandlerContext } from "$fresh/server.ts";
export const handler = async (req: Request, _ctx: HandlerContext) => {
if (req.method === "POST") {
const data = await req.json();
// Обработка метрик: сохранение в БД или логирование
console.log("RUM data:", data);
return new Response("OK", { status: 200 });
}
return new Response("Method Not Allowed", { status: 405 });
};
Такой подход позволяет динамически собирать статистику с каждой страницы без нарушения SSR-потока, обеспечивая актуальные данные по поведению пользователей.
Fresh ориентирован на сбор важнейших метрик веб-производительности, которые соответствуют стандарту Web Vitals:
RUM в Fresh позволяет не только фиксировать значения, но и сегментировать их по URL, устройствам и браузерам, что облегчает выявление узких мест в производительности.
Особенность Fresh — Islands Architecture, при которой интерактивные участки страницы рендерятся как отдельные модули. Это влияет на RUM следующим образом:
Fresh не накладывает строгих ограничений на хранение RUM-данных. На практике используются:
Анализ данных включает визуализацию метрик, фильтрацию по пользователям и устройствам, построение дашбордов с исторической динамикой производительности.
Fresh использует несколько стратегий, чтобы RUM не замедлял работу сайта:
defer.requestIdleCallback) для снижения нагрузки на основной
поток.Такой подход позволяет получать полные метрики без заметного влияния на UX, что критично для страниц с высокой посещаемостью.
RUM в Fresh легко интегрируется с внешними системами аналитики и мониторинга, включая:
Для этого достаточно изменить конечную точку отправки данных в скрипте RUM, сохранив формат JSON и метки Web Vitals.
Эти возможности позволяют создавать динамично оптимизированные приложения, где каждый пользовательский опыт учитывается в реальном времени.