You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Загрузка скриптаexportconstloadGAScript=(id: string)=>{returnnewPromise<void>((resolve,reject)=>{if(document.getElementById('ga-script')){resolve()return}constscript=document.createElement('script')script.id='ga-script'script.src=`https://www.googletagmanager.com/gtag/js?id=${id}`script.async=truescript.onload=()=>resolve()script.onerror=()=>reject(newError('Failed to load Google Analytics'))document.head.appendChild(script)})}// ИнициализацияexportconstinitGA=(id: string)=>{constw=windowasWindowif(w){w.dataLayer=w.dataLayer||[]functiongtag(...args: any[]){w.dataLayer.push(args)}gtag('js',newDate())gtag('config',id)}}
Процесс учета просмотров
При монтировании страницы:
// В FeedProviderconst[seen,setSeen]=createSignal<Record<string,number>>({})// При загрузке страницыonMount(async()=>{awaitloadGAScript(GA_ID)initGA(GA_ID)})
При просмотре материала:
constaddSeen=(slug: string)=>{setSeen(prev=>({
...prev,[slug]: Date.now()}))// Отправляем событие в GAgtag('event','view_item',{item_id: slug,timestamp: Date.now()})}
Оптимизации
Загрузка скрипта:
Асинхронная загрузка через async
Проверка на существующий скрипт
Обработка ошибок загрузки
Отправка событий:
Дедупликация через seen состояние
Временные метки для каждого просмотра
Батчинг через dataLayer
Метрики качества
Успешность загрузки GA скрипта
Процент отправленных событий
Задержка между просмотром и отправкой события
Требуемая реализация
Основные компоненты
seen - Сигнал в FeedProvider для хранения просмотров
addSeen - Метод для отметки просмотра
getViewedStatus - Проверка статуса просмотра
Процесс учета просмотров
При монтировании компонента:
// В ArticleCardonMount(()=>{// Отмечаем просмотр при монтированииaddSeen(article.slug,{type: article.layout,author: article.created_by.slug,topic: article.main_topic?.slug})})