le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Il nome scientifico è Event Tracking, che si concentra principalmente sull'acquisizione, l'elaborazione e l'invio di tecnologie correlate e processi di implementazione per il comportamento degli utenti o i processi aziendali.
Burying a point è un termine professionale nel campo dei dati ed è anche un nome comune nel campo di Internet.
I punti sepolti costituiscono la base per l'analisi dei dati di prodotto e vengono generalmente utilizzati per il feedback da sistemi di raccomandazione, monitoraggio e analisi del comportamento degli utenti, analisi statistica di nuove funzioni o effetti dell'attività operativa, ecc.
I punti di incorporamento includono due concetti importanti: evento (evento) e attributo (param)
L'interramento senza traccia (interramento completo) utilizza il metodo di monitoraggio integrato del browser o dell'APP per monitorare la pagina di navigazione dell'utente, i clic e altri comportamenti. Viene generalmente utilizzato per l'analisi dei dati a grana grossa, come lo slardar dell'azienda
discordanza:
Punti di seppellimento del codice, gli sviluppatori front-end personalizzano il monitoraggio e la raccolta nel codice
discordanza:
SDK per punti sepolti, l'SDK espone l'interfaccia per la segnalazione di punti sepolti e gli sviluppatori non sono a conoscenza del processo di monitoraggio e raccolta, come il tè dell'azienda
Svantaggi: NA
vantaggio:
Di solito il front-end conta i punti sepolti in base alle dimensioni della pagina Gli attributi comuni degli eventi sono i seguenti:
Attributi | descrivere |
---|---|
fluido | User id, se l'utente non è loggato, restituisce uno specifico id identificativo |
url | L'URL della pagina di attivazione dell'evento corrente |
orario dell'evento | Il timestamp che ha attivato il punto nascosto |
ora locale | L'ora locale dell'utente che ha attivato il punto nascosto è espressa nel formato standard AAAA=MM-GG HH:mm:ss, utile per la successiva interrogazione diretta della stringa. |
tipo di dispositivo | Il tipo di dispositivo attualmente utilizzato dall'utente, ad esempio Apple, Samsung, Chrome |
ID del dispositivo | L'ID del dispositivo utilizzato dall'utente corrente |
Tipo di sistema operativo | Il tipo di sistema entra in Windows, Macos, iOS, Android |
Versione del sistema operativo | versione del sistema |
Versione dell'app | Versione dell'applicazione |
ID applicazione | ID dell'applicazione corrente |
extra | I dati personalizzati, in genere stringhe serializzate, e la struttura dei dati dovrebbero rimanere stabili |
evento | Tempo di segnalazione | descrivere |
---|---|---|
Soggiorno di pagina | Quando la pagina corrente viene cambiata o la pagina viene scaricata | Registra il tempo di navigazione della pagina precedente |
fotovoltaico | Quando si accede alla pagina | Numero di visite alla pagina, uv deve essere filtrato solo in base al deviceId |
eventi di interazione | Quando viene attivato un evento di interazione dell'utente | Come fare clic, premere a lungo, ecc. |
evento logico | Quando le condizioni logiche sono soddisfatte | Come login, salto di pagina, ecc. |
Attualmente, la maggior parte dei dati degli indicatori di prestazione provengono dall'API window.performance.
nome del parametro | descrivere |
---|---|
connettiFine | HTTP (TCP) Restituisce il timestamp quando è stata stabilita la connessione tra il browser e il server. Se viene stabilita una connessione persistente, il valore restituito è uguale al valore dell'attributo fetchStart. La creazione della connessione si riferisce al completamento di tutti i processi di handshake e di autenticazione. |
connettiAvvia | Timestamp HTTP (TCP) alla fine della query del nome di dominio. Se viene utilizzata una connessione persistente o le informazioni vengono archiviate in una cache o in una risorsa locale, questo valore sarà coerente con fetchStart. |
domCompleto | L'analisi del documento corrente è completata, ovvero il timestamp in cui Document.readyState diventa "completo" e viene attivato il corrispondente readystatechange. |
EventoDominioContenutoCaricatoFine | Il timestamp in cui sono stati eseguiti tutti gli script che devono essere eseguiti immediatamente (indipendentemente dall'ordine di esecuzione). |
domContentLoadedEventInizio | Quando il parser invia l'evento DOMContentLoaded, il timestamp in cui tutti gli script che devono essere eseguiti sono stati analizzati. |
domInterattivo | Il timestamp in cui la struttura DOM della pagina Web corrente termina l'analisi e inizia a caricare le risorse incorporate (ovvero, quando la proprietà Document.readyState diventa "interattiva" e viene attivato l'evento readystatechange corrispondente). |
domCaricamento | Il timestamp in cui inizia l'analisi della struttura DOM della pagina Web corrente (ovvero, quando la proprietà Document.readyState passa a "caricamento" e viene attivato l'evento readystatechange corrispondente). |
domainLookupEnd | L'ora in cui è stata completata la query del nome di dominio DNS.Uguale al valore fetchStart se viene utilizzata la memorizzazione nella cache locale (ovvero nessuna query DNS) o connessioni persistenti |
domainLookupStart | Timestamp UNIX DNS quando è stata avviata la query del nome di dominio. Se viene utilizzata una connessione persistente o le informazioni vengono archiviate in una cache o in una risorsa locale, questo valore sarà coerente con fetchStart. |
recuperoInizia | Il browser è pronto per recuperare il timestamp del documento utilizzando una richiesta HTTP. Questo momento sarà prima che venga controllata la cache dell'applicazione. |
caricaEventoFine | Al termine dell'evento di caricamento, ovvero il timestamp del completamento dell'evento di caricamento. Se questo evento non è stato ancora inviato o non è stato ancora completato, il suo valore sarà 0. |
caricaEventoInizio | Il timestamp in cui è stato inviato l'evento di caricamento. Se questo evento non è stato ancora inviato, il suo valore sarà 0. |
navigazioneInizio | Il timestamp in cui è terminato lo scaricamento della pagina precedente nello stesso browser. Se non esiste una pagina precedente, questo valore sarà lo stesso di fetchStart. |
reindirizzamentoFine | Il timestamp in cui è stato completato l'ultimo reindirizzamento HTTP (ovvero, quando è stato ricevuto direttamente l'ultimo bit della risposta HTTP). Se non è presente alcun reindirizzamento o se il reindirizzamento proviene da un'origine diversa, questo valore restituirà 0. |
reindirizzamentoInizia | Il timestamp in cui è iniziato il primo reindirizzamento HTTP. Se non è presente alcun reindirizzamento o se il reindirizzamento proviene da un'origine diversa, questo valore restituirà 0. |
richiestaInizia | Restituisce il timestamp quando il browser ha effettuato una richiesta HTTP al server (o ha iniziato a leggere la cache locale). |
rispostaFine | Restituisce il timestamp quando il browser ha ricevuto (o letto dalla cache locale, o letto da una risorsa locale) l'ultimo byte dal server (o quando la connessione HTTP è stata chiusa se era stata chiusa prima). |
rispostaInizia | Restituisce il timestamp di quando il browser ha ricevuto il primo byte dal server (o letto dalla cache locale).Se il livello di trasporto fallisce dopo la richiesta iniziale e la connessione viene riaperta, questo attributo verrà conteggiato come il corrispondente tempo di inizio della nuova richiesta. |
Connessione sicuraInizio | HTTPS restituisce il timestamp in cui il browser e il server hanno iniziato l'handshake per una connessione sicura. Se la pagina Web corrente non richiede una connessione sicura, restituisce 0. |
scaricaEventoFine | Corrispondente a unloadEventStart, il timestamp del completamento dell'elaborazione dell'evento di scarico. Se non è presente alcuna pagina precedente, questo valore restituirà 0. |
scaricaEventoInizio | Il timestamp in cui è stato generato l'evento di scaricamento della pagina precedente. Se non esiste una pagina precedente, questo valore restituirà 0. |
Nome dell'indicatore | descrivere |
---|---|
FP | Orario della prima pagina disegnata |
FCP | L'ora in cui il contenuto della pagina viene disegnato per la prima volta |
FMP | Il primo momento effettivo di disegno della pagina FMP>=FCP |
TTI | Pagina completamente interattiva |
FID | Durante la fase di caricamento della pagina, il tempo di ritardo per la prima interazione dell’utente |
MPFID | Durante la fase di caricamento della pagina, il tempo di ritardo massimo che l'interazione dell'utente può riscontrare |
CARICO | L'ora in cui la pagina è completamente caricata (l'ora in cui si verifica l'evento di caricamento) |
L'indicatore FP (First Paint) riflette solitamente il tempo dello schermo bianco della pagina. Il tempo dello schermo bianco rifletterà la situazione attuale è molto buono, lo schermo bianco Minore è il tempo, minore è la probabilità di abbandono dell'utente.
Questo indicatore può ottenere le informazioni sui punti fornite dall'API PerformancePaintTming tramite il metodo preformance.getEntriesByType('paint') Trova l'oggetto con il nome first-paint e la descrizione è i dati dell'indicatore FP:
FCP (First Contentful Paint) è il momento in cui il contenuto viene visualizzato per la prima volta Negli indicatori statistici delle prestazioni, il tempo dal momento in cui l'utente inizia ad accedere alla pagina Web a FCP può essere considerato generalmente come il tempo senza contenuto , FCP >= FP
Gli indicatori possono ottenere le informazioni sui punti fornite dall'API PerformancePaintTiming tramite il metodo performance.getEntriesByType('paint') Trova l'oggetto con il nome first-contentful-paint, che descrive i dati dell'indicatore FCP, come mostrato nella figura seguente:
FMP (First Meaningful Paint) è il momento in cui viene disegnato per la prima volta un contenuto significativo. Quando il layout e il contenuto testuale dell'intera pagina sono completamente renderizzati, si può considerare che il primo dipinto significativo di contenuto significativo sia completato.Pertanto, FMP misura il tempo impiegato dagli utenti per vedere il contenuto principale di una pagina web ed è un importante indicatore di misurazione dal punto di vista dell'esperienza dell'utente.
Un metodo di calcolo FMP ora riconosciuto dall'industria front-end è "il tempo di disegno dopo la modifica massima del layout della pagina durante il caricamento e il rendering". Puoi utilizzare MutationObserver per monitorare ogni modifica complessiva del DOM della pagina, attivare la richiamata di MutationObserver e calcolare il punteggio di modifica dell'albero DOM corrente durante la richiamata. Il momento in cui il punteggio cambia maggiormente è il punto temporale FMP.
TTI (Time To Interactive), ovvero il tempo impiegato dall'inizio del caricamento della pagina fino a quando la pagina è in uno stato completamente interattivo. Quando la pagina è in uno stato completamente interattivo, vengono soddisfatte le tre condizioni seguenti:
La pagina mostra già contenuti utili.
E' stata registrata la funzione di risposta all'evento associata agli elementi visibili nella pagina.
La funzione di risposta all'evento può iniziare l'esecuzione entro 50 ms dal verificarsi dell'evento.
window.performance.getEntriesByType('resource') restituirà vari indicatori di prestazione di tutte le risorse (js, css, img...) caricate nella pagina corrente, che possono essere utilizzati per la raccolta di dati statici sulle prestazioni delle risorse.
I tipi principali sono: script, link, img, css, xmlhttprequest, beacon, fetch, altro.
PerformanceResourceTiming - API Web | MDN
Nome dell'indicatore | descrivere | Calcolo |
---|---|---|
Interrogazione DNS | La fase DNS richiede tempo | domainLookupEnd - domainLookupStart |
Connessione TCP | Tempo di fase TCP | connettiFine - connettiInizio |
Creazione della connessione SSL | Tempo di connessione SSL | connectEnd - avvioconnessionesicura |
Richiesta di rete del primo byte | Tempo di risposta del primo byte (ttfb) | rispostaInizio - richiestaInizio |
Ce ne sono tre tipi
// 在捕获阶段,捕获资源加载失败错误
Element.addEventListener('error', e => {
const target = e.target
if (target != window) {
monitor.errors.push({
type: target.localName,
url: target.src || target.href,
msg: (target.src || target.href) + ' is load error',
time: Date.now()
})
}
})
// 监听 js 错误
window.onerror = function(msg, url, row, col, error) {
monitor.errors.push({
type: 'javascript',
row: row,
col: col,
msg: error && error.stack? error.stack : msg,
url: url,
time: Date.now()
})
}
// 监听 promise 错误 缺点是获取不到行数数据
addEventListener('unhandledrejection', e => {
monitor.errors.push({
type: 'promise',
msg: (e.reason && e.reason.msg) || e.reason || '',
time: Date.now()
})
})
In questo scenario, ci sono due questioni da considerare:
Se l'interfaccia di reporting dei dati e il sistema aziendale utilizzano lo stesso nome di dominio, il browser ha limiti sul numero di richieste simultanee, quindi esiste la possibilità di concorrenza per le risorse di rete.
I browser solitamente ignorano le richieste Ajax asincrone quando la pagina viene scaricata. Se è necessaria una richiesta di dati, viene generalmente creata una richiesta Ajax sincrona nell'evento unload o beforeunload per ritardare lo scaricamento della pagina. Dal punto di vista dell'utente, i salti di pagina sono più lenti.
vantaggio:
Invia dati in modo affidabile quando la pagina viene scaricata, senza bloccarne la chiusura.
Supporta l'invio di dati in background.
discordanza:
È possibile inviare solo richieste POST e non è possibile ottenere i risultati della risposta.
Oltre a Internet Explorer, i browser moderni più diffusi attualmente hanno un tasso di supporto molto elevato per i beacon. Beacon - Documentazione MDN
L'interfaccia Beacon viene utilizzata per pianificare richieste asincrone non bloccanti al server Web.
In parole povere, Beacon può inviare dati in modo asincrono al server e può garantire che la richiesta venga inviata prima che lo scaricamento della pagina sia completato (risolve il problema che lo scaricamento della pagina Ajax terminerà la richiesta). Come usarlo:
navigator.sendBeacon(url, data);
Il parametro data è facoltativo e il suo tipo può essere ArrayBufferView, Blob, DOMString o FormData. Se il browser aggiunge con successo la richiesta beacon alla coda da inviare, questo metodo restituirà true, altrimenti restituirà false
Quando si utilizza Beacon, il backend deve utilizzare il metodo post per ricevere i parametri. Considerando i problemi tra domini, il backend deve anche modificare l'interfaccia e configurare CORS. Allo stesso tempo, l'intestazione della richiesta deve soddisfare l'intestazione della richiesta CORS-safelisted, in cui il tipo di contenuto deve essere application/x-www-form-urlencoded, multipart/form-data o text/plain.
type ContentType = 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
const serilizeParams = (params: object) => {
return window.btoa(JSON.stringify(params))
}
function sendBeacon(url: string, params: object) {
const formData = new FormData()
formData.append('params', serilizeParams(params))
navigator.sendBeacon(url, formData)
}
vantaggio:
È semplice da usare, ha una buona compatibilità e può essere segnalato tra domini diversi.
Non bloccherà il caricamento e la chiusura della pagina.
discordanza:
È possibile inviare solo richieste GET e non è possibile ottenere risultati di risposta.
Le operazioni asincrone non sono supportate.
Il problema di compatibilità di sendBeacon è inevitabile, ma puoi sfruttare appieno la funzionalità che la maggior parte dei browser completerà caricando l'immagine prima che la pagina venga scaricata e riporterà i dati aggiungendo img alla pagina.
function sendImage(url: string, params: object) {
const img = new Image()
img.style.display = 'none'
const removeImage = function() {
img.parentNode.removeChild(img)
}
img.onload = removeImage
img.onerror = removeImage
img.src = `${url}?params=${serilizeParams(params)}`
document.body.appendChild(img)
}
Poiché l'immagine img è una richiesta get, diversi server hanno restrizioni sulla lunghezza dell'uri. Quando la lunghezza supera il limite, si verificherà un errore HTTP 414. Pertanto, è necessario prestare attenzione anche alla frequenza di reporting per ridurre troppi attributi caricato in una sola volta.
È preferibile il metodo sendBeacon e il metodo Image viene utilizzato come fallback.
function sendLog(url: string, params: object) {
if(navigator.sendBeacon) {
sendBeacon(url, params)
} else {
sendImage(url, params)
}
}
In effetti, molte persone usano le GIF per seppellire il punto?
La segnalazione dei dati al server può essere effettuata richiedendo l'interfaccia, richiedendo file ordinari o richiedendo risorse immagine. Finché i dati possono essere segnalati, sia che si tratti di richiedere un file GIF, di un file js o di richiamare un'interfaccia di pagina, al server in realtà non interessa il metodo di reporting specifico. Allora perché tutti i sistemi utilizzano in modo uniforme il metodo di richiesta di immagini GIF per riportare i dati?
●Impedisci cross-domini
In generale, il nome di dominio punteggiato non è il nome di dominio corrente, quindi tutte le richieste di interfaccia costituiranno richieste interdominio. Le richieste interdominio possono essere facilmente intercettate dai browser a causa di una configurazione errata e di errori di segnalazione, il che è inaccettabile. Tuttavia, l'attributo src dell'immagine non attraversa il dominio ed è anche possibile avviare richieste. (Escludere i rapporti sull'interfaccia)
●Impedisci il blocco del caricamento della pagina e l'impatto sull'esperienza dell'utente
Di solito, dopo aver creato un nodo di risorse, il browser non invierà effettivamente una richiesta di risorsa finché l'oggetto non verrà inserito nell'albero DOM del browser. L'utilizzo ripetuto del DOM non solo causerà problemi di prestazioni, ma il caricamento di risorse js/css bloccherà anche il rendering della pagina e influenzerà l'esperienza dell'utente.
L'eccezione sono le richieste di immagini. Non solo non è necessario inserirlo nel DOM durante la costruzione di un'immagine, ma può avviare una richiesta purché il nuovo oggetto Image venga creato in js e non vi sono problemi di blocco in un ambiente browser senza js, è possibile essere gestito normalmente anche tramite il tag img, che è un altro tipo di richiesta di risorsa cosa che non si può fare. (Escludi metodo file)
●Rispetto a PNG/JPG, GIF ha la dimensione più piccola
Il file BMP più piccolo richiede 74 byte, PNG richiede 67 byte e una GIF legale richiede solo 43 byte.
A parità di risposta, GIF può far risparmiare il 41% di traffico rispetto a BMP e il 35% di traffico rispetto a PNG.
E la maggior parte di essi utilizza GIF trasparenti da 1 * 1 pixel per segnalare.
1x1 pixel è l'immagine legale più piccola. Inoltre, poiché viene eseguito tramite immagini, è meglio rendere le immagini trasparenti, in modo che ciò non influisca sull'effetto di visualizzazione della pagina stessa. Per indicare che l'immagine è trasparente, è sufficiente utilizzare un bit binario per contrassegnare l'immagine come colore trasparente e non è necessario memorizzare i dati dello spazio colore, il che può far risparmiare volume.
vantaggio:
È possibile inviare richieste asincrone e sono supportati più metodi HTTP come GET e POST.
I risultati della risposta possono essere ottenuti e ulteriormente elaborati.
discordanza:
La logica della richiesta e della risposta deve essere gestita manualmente.
Necessità di gestire problemi di richiesta tra domini (come la configurazione di CORS).
Utilizza XMLHttpRequest o Fetch API per inviare richieste asincrone per riportare i dati. Puoi scegliere di utilizzare il metodo GET o POST e inviare i dati come corpo della richiesta o parametri URL.
vantaggio:
Buone prestazioni in tempo reale e supporta la comunicazione bidirezionale.
Adatto per il monitoraggio in tempo reale e il reporting di dati su larga scala.
discordanza:
Il server deve supportare il protocollo WebSocket.
Più complesso e non adatto a semplici requisiti di punti interrati.
Gli strumenti comuni per il seppellimento dei dati front-end includono Google Analytics, Baidu Statistics, Umeng Statistics, ecc. Naturalmente, puoi anche utilizzare l'interfaccia o la piattaforma interna dell'azienda per i report.
Prendiamo come esempio Google Analytics:
Google Analytics è uno strumento di analisi dei siti web sviluppato da Google per monitorare e segnalare il traffico del sito web. Aiuta i proprietari di siti Web a comprendere il comportamento dei loro visitatori, compreso chi sono, da dove provengono, cosa fanno sul sito e altro ancora. Attraverso Google Analytics, i proprietari di siti web possono comprendere meglio il proprio pubblico, ottimizzare i contenuti del sito web e le strategie di marketing, migliorando così le prestazioni del sito web e l'esperienza dell'utente. Google Analytics offre numerose funzioni di analisi dei dati, inclusi dati in tempo reale, analisi del comportamento degli utenti, monitoraggio delle conversioni, analisi delle sorgenti di traffico e altro ancora. È uno strumento potente ampiamente utilizzato in vari siti Web e campagne di marketing online.
Poiché utilizziamo Google Analytics, dobbiamo prima avere un account Google, che devi creare tu stesso. In secondo luogo è necessario conoscere l'ingresso di Google Analytics. Ecco i due indirizzi utilizzati:
Gestione tag di Google: tagmanager.google.com/
Analisi: analytics.google.com/
Gestore tag di Google
Google Tag Manager (GTM) è un sistema di gestione dei tag sviluppato e fornito da Google. Consente agli amministratori del sito Web di gestire e distribuire vari codici di monitoraggio, codici di analisi e tag di marketing senza modificare il codice del sito Web. Con GTM, gli utenti possono aggiungere, aggiornare ed eliminare facilmente i tag senza fare affidamento sugli sviluppatori.
Le caratteristiche principali di GTM includono:
In parole povere: questa piattaforma viene utilizzata per raccogliere eventi nascosti attivati dal front-end e può realizzare report sui dati personalizzando le condizioni di attivazione e attivando i callback degli eventi. Viene utilizzata qui per raccogliere dati e segnalarli a Google Analytics.
statistiche di Google
Come suggerisce il nome, si tratta di un sito Web utilizzato per raccogliere, visualizzare e visualizzare dati