minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
O nome científico é Event Tracking, que tem como foco principal a captura, processamento e envio de tecnologias relacionadas e processos de implementação do comportamento do usuário ou processos de negócios.
Enterrar um ponto é um termo profissional na área de dados e também um nome comum na área da Internet.
Os pontos enterrados são a base para a análise de dados do produto e geralmente são usados para feedback de sistemas de recomendação, monitoramento e análise do comportamento do usuário, análise estatística de novas funções ou efeitos de atividades operacionais, etc.
Os pontos de incorporação incluem dois conceitos importantes: evento (evento) e atributo (parâmetro)
O enterramento sem rastros (enterrado completo) usa o método de monitoramento integrado do navegador ou APP para monitorar a página de navegação do usuário, cliques e outros comportamentos. Geralmente é usado para análise de dados de granulação grossa, como o slardar da empresa.
deficiência:
Pontos de enterramento de código, desenvolvedores front-end personalizam monitoramento e coleta no código
deficiência:
SDK de ponto enterrado, o SDK expõe a interface para relatar pontos enterrados, e os desenvolvedores não têm conhecimento do processo de monitoramento e coleta, como o chá da empresa
Desvantagens: NA
vantagem:
Normalmente, o front-end conta os pontos ocultos de acordo com as dimensões da página. Os atributos comuns do evento são os seguintes:
Atributos | descrever |
---|---|
uid | ID do usuário, se o usuário não estiver logado, retorna um ID de identificação específico |
URL | O URL da página de acionamento do evento atual |
hora do evento | O carimbo de data/hora que acionou o ponto oculto |
horário local | A hora local do usuário que acionou o ponto oculto é expressa no formato padrão AAAA=MM-DD HH:mm:ss, que é conveniente para consulta direta de string posteriormente. |
tipo de dispositivo | O tipo de dispositivo usado atualmente pelo usuário, como apple, Samsung, chrome |
ID de dispositivo | O ID do dispositivo usado pelo usuário atual |
Tipo de sistema operacional | Tipo de sistema entra windows, macos, ios, android |
osVersão | versão do sistema |
versão do aplicativo | Versão do aplicativo |
ID do aplicativo | ID do aplicativo atual |
extra | Dados personalizados, geralmente strings serializadas, e a estrutura de dados devem permanecer estáveis |
evento | Tempo de relatório | descrever |
---|---|---|
Estadia de página | Quando a página atual é trocada ou a página é descarregada | Registre o tempo de navegação da página anterior |
fotovoltaica | Ao entrar na página | Número de visitas à página, uv só precisa ser filtrado com base no deviceId |
eventos de interação | Quando um evento de interação do usuário é acionado | Como clique, toque longo, etc. |
evento lógico | Quando as condições lógicas são atendidas | Como login, página de salto, etc. |
Atualmente, a maioria dos dados dos indicadores de desempenho vem da API window.performance.
nome do parâmetro | descrever |
---|---|
conectarFim | HTTP (TCP) Retorna o carimbo de data/hora em que a conexão entre o navegador e o servidor foi estabelecida. Se uma conexão persistente for estabelecida, o valor de retorno será igual ao valor do atributo fetchStart. O estabelecimento da conexão refere-se à conclusão de todos os handshakes e processos de autenticação. |
conectarIniciar | Carimbo de data e hora HTTP (TCP) no final da consulta de nome de domínio. Se uma conexão persistente for usada ou as informações forem armazenadas em um cache ou recurso local, esse valor será consistente com fetchStart. |
domCompleto | A análise do documento atual é concluída, ou seja, o carimbo de data/hora quando Document.readyState se torna 'completo' e o readystatechange correspondente é acionado. |
domContentLoadedEventEnd | O carimbo de data/hora em que todos os scripts que precisam ser executados imediatamente foram executados (independentemente da ordem de execução). |
domContentLoadedEventStart | Quando o analisador envia o evento DOMContentLoaded, o carimbo de data/hora em que todos os scripts que precisam ser executados foram analisados. |
domInterativo | O carimbo de data/hora em que a estrutura DOM da página da web atual termina a análise e começa a carregar recursos incorporados (ou seja, quando a propriedade Document.readyState muda para "interativo" e o evento readystatechange correspondente é acionado). |
domCarregando | O carimbo de data/hora em que a estrutura DOM da página da web atual começa a ser analisada (ou seja, quando a propriedade Document.readyState muda para "carregando" e o evento readystatechange correspondente é acionado). |
domínioLookupEnd | A hora em que a consulta do nome de domínio DNS foi concluída.Igual ao valor fetchStart se for usado cache local (ou seja, sem consultas DNS) ou conexões persistentes |
domínioLookupStart | Registro de data e hora DNS UNIX quando a consulta do nome de domínio foi iniciada. Se uma conexão persistente for usada ou as informações forem armazenadas em um cache ou recurso local, esse valor será consistente com fetchStart. |
buscarIniciar | O navegador está pronto para buscar o carimbo de data/hora do documento usando uma solicitação HTTP. Este momento será antes de qualquer cache do aplicativo ser verificado. |
carregarEventoFim | Quando o evento de carregamento termina, ou seja, o carimbo de data/hora quando o evento de carregamento é concluído. Caso este evento ainda não tenha sido enviado ou ainda não tenha sido concluído, seu valor será 0. |
carregarEventoInício | O carimbo de data/hora em que o evento de carregamento foi enviado. Caso este evento ainda não tenha sido enviado, seu valor será 0. |
navegaçãoIniciar | O carimbo de data/hora em que o descarregamento da página anterior no mesmo navegador terminou. Se não houver página anterior, este valor será igual a fetchStart. |
redirecionarFim | O carimbo de data/hora em que o último redirecionamento HTTP foi concluído (ou seja, quando o último bit da resposta HTTP foi recebido diretamente). Se não houver redirecionamento ou se o redirecionamento for de origem diferente, esse valor retornará 0. |
redirecionarIniciar | O carimbo de data/hora em que o primeiro redirecionamento HTTP foi iniciado. Se não houver redirecionamento ou se o redirecionamento for de origem diferente, esse valor retornará 0. |
solicitaçãoIniciar | Retorna o carimbo de data/hora quando o navegador fez uma solicitação HTTP ao servidor (ou começou a ler o cache local). |
respostaFim | Retorna o carimbo de data/hora quando o navegador recebeu (ou leu do cache local, ou leu de um recurso local) o último byte do servidor (ou quando a conexão HTTP foi fechada, se tiver sido fechada antes disso). |
respostaIniciar | Retorna o carimbo de data/hora quando o navegador recebeu o primeiro byte do servidor (ou leu do cache local).Se a camada de transporte falhar após a solicitação inicial e a conexão for reaberta, este atributo será contado como o tempo de iniciação correspondente da nova solicitação. |
secureConnectionStart | HTTPS retorna o carimbo de data/hora em que o navegador e o servidor iniciaram o handshake para uma conexão segura. Se a página da web atual não exigir uma conexão segura, retorne 0. |
descarregarEventoFim | Correspondente a unloadEventStart, o carimbo de data/hora em que o processamento do evento de descarregamento é concluído. Se não houver página anterior, este valor retornará 0. |
descarregarEventoInício | O carimbo de data/hora em que o evento de descarregamento da página anterior foi lançado. Se não houver página anterior, este valor retornará 0. |
Nome do indicador | descrever |
---|---|
FP | Hora do primeiro sorteio da página |
PCF | O momento em que a página tem conteúdo desenhado pela primeira vez |
FMP | O primeiro tempo efetivo de desenho da página FMP>=FCP |
TTI | Página totalmente interativa |
FID | Durante a fase de carregamento da página, o tempo de atraso para a primeira interação do usuário |
MPFID | Durante o estágio de carregamento da página, o tempo máximo de atraso que a interação do usuário pode encontrar |
CARREGAR | O horário em que a página está totalmente carregada (o horário em que ocorre o evento de carregamento) |
O indicador FP (FIrst Paint) geralmente reflete o tempo de tela branca da página. Quanto menor o tempo que o usuário espera pelo conteúdo, menor será o desempenho de carregamento da página da Web. é muito bom, a tela branca Quanto menor o tempo, menor a probabilidade de desligamento do usuário.
Este indicador pode obter as informações de ponto fornecidas pela API PerformancePaintTming por meio do método preformance.getEntriesByType('paint') Encontre o objeto com o nome first-paint e a descrição são os dados do indicador FP:
FCP (First Contentful Paint) é o momento em que o conteúdo é renderizado pela primeira vez. Nos indicadores estatísticos de desempenho, o tempo desde o momento em que o usuário começa a acessar a página da web até o FCP pode ser considerado como o tempo sem conteúdo. , FCP >= FP
Os indicadores podem obter as informações de ponto fornecidas pela API PerformancePaintTiming por meio do método performance.getEntriesByType('paint') Encontre o objeto com o nome first-contentful-paint, que descreve os dados do indicador FCP, conforme mostrado na figura a seguir:
FMP (First Meaningful Paint) é o momento em que o conteúdo significativo é desenhado pela primeira vez. Quando o layout e o conteúdo do texto de toda a página são completamente renderizados, pode-se considerar que a primeira pintura significativa do conteúdo significativo é concluída.Portanto, o FMP mede o tempo que os usuários levam para ver o conteúdo principal de uma página web e é um importante indicador de medição do ponto de vista da experiência do usuário.
Um método de cálculo do FMP que agora é reconhecido pela indústria de front-end é “o tempo de desenho após a alteração máxima do layout da página durante o carregamento e a renderização”. Você pode usar o MutationObserver para monitorar cada alteração geral do DOM da página, acionar o retorno de chamada do MutationObserver e calcular a pontuação da alteração da árvore DOM atual durante o retorno de chamada. O momento em que a pontuação muda mais é o ponto no tempo do FMP.
TTI (Time To Interactive), que é o tempo que leva desde o início do carregamento da página até que a página esteja em um estado totalmente interativo. Quando a página está em um estado totalmente interativo, as três condições a seguir são atendidas:
A página já exibe conteúdo útil.
A função de resposta a eventos associada aos elementos visíveis da página foi registrada.
A função de resposta a eventos pode começar a ser executada dentro de 50 ms após a ocorrência do evento.
window.performance.getEntriesByType('resource') retornará vários indicadores de desempenho de todos os recursos (js, css, img...) carregados na página atual, que podem ser usados para coleta de dados estáticos de desempenho de recursos.
Os principais tipos são: script, link, img, css, xmlhttprequest, beacon, fetch, outros.
PerformanceResourceTiming - APIs da Web | MDN
Nome do indicador | descrever | Cálculo |
---|---|---|
Consulta DNS | A fase DNS leva tempo | domínioLookupEnd - domínioLookupStart |
Conexão TCP | Tempo de fase TCP | conectarFim - conectarInício |
Estabelecimento de conexão SSL | Tempo de conexão SSL | connectEnd - secureConnectionStart |
Solicitação de rede do primeiro byte | Tempo de resposta do primeiro byte (ttfb) | respostaStart - solicitaçãoStart |
Existem três tipos
// 在捕获阶段,捕获资源加载失败错误
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()
})
})
Neste cenário, há duas questões a considerar:
Se a interface de relatório de dados e o sistema de negócios usarem o mesmo nome de domínio, o navegador terá limites no número de solicitações simultâneas, portanto existe a possibilidade de competição pelos recursos da rede.
Os navegadores geralmente ignoram solicitações assíncronas de ajax quando a página é descarregada. Se uma solicitação de dados for necessária, uma solicitação síncrona de ajax geralmente é criada no evento unload ou beforeunload para atrasar o descarregamento da página. Da perspectiva do usuário, os saltos de página ficam mais lentos.
vantagem:
Envia dados de forma confiável quando a página é descarregada, sem bloquear o fechamento da página.
Suporte para envio de dados em segundo plano.
deficiência:
Somente solicitações POST podem ser enviadas e os resultados das respostas não podem ser obtidos.
Além do Internet Explorer, os atuais navegadores modernos têm uma taxa de suporte muito alta para beacons. Farol - Documentação MDN
A interface Beacon é usada para agendar solicitações assíncronas sem bloqueio para o servidor Web.
Em termos leigos, o Beacon pode enviar dados de forma assíncrona para o servidor e pode garantir que a solicitação seja enviada antes que o descarregamento da página seja concluído (resolva o problema de que o descarregamento da página ajax encerrará a solicitação). Como usá-lo:
navigator.sendBeacon(url, data);
O parâmetro data é opcional e seu tipo pode ser ArrayBufferView, Blob, DOMString ou FormData. Se o navegador adicionar com sucesso a solicitação de beacon à fila a ser enviada, este método retornará verdadeiro, caso contrário retornará falso
Ao usar o Beacon, o backend precisa usar o método post para receber parâmetros. Considerando problemas de domínio cruzado, o backend também precisa modificar a interface e configurar o CORS. Ao mesmo tempo, o cabeçalho da solicitação deve atender ao cabeçalho da solicitação na lista segura do CORS, no qual o tipo de conteúdo deve ser application/x-www-form-urlencoded, multipart/form-data ou 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)
}
vantagem:
É simples de usar, tem boa compatibilidade e pode ser relatado em vários domínios.
Não bloqueará o carregamento e o fechamento da página.
deficiência:
Somente solicitações GET podem ser enviadas e os resultados das respostas não podem ser obtidos.
Operações assíncronas não são suportadas.
O problema de compatibilidade do sendBeacon é inevitável, mas você pode aproveitar ao máximo o recurso de que a maioria dos navegadores conclui o carregamento da imagem antes que a página seja descarregada e relata os dados adicionando img à página.
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)
}
Como a imagem img é uma solicitação get, diferentes servidores têm restrições quanto ao comprimento do uri. Quando o comprimento exceder o limite, ocorrerá um erro HTTP 414. Portanto, você também deve prestar atenção à frequência de relatório para reduzir muitos atributos. carregado de uma só vez.
O método sendBeacon é preferido e o método Image é usado como substituto.
function sendLog(url: string, params: object) {
if(navigator.sendBeacon) {
sendBeacon(url, params)
} else {
sendImage(url, params)
}
}
Na verdade, muitas pessoas usam GIF para enterrar o ponto?
O reporte de dados ao servidor pode ser feito através da solicitação da interface, solicitação de arquivos comuns ou solicitação de recursos de imagem. Contanto que os dados possam ser relatados, seja solicitando um arquivo GIF, solicitando um arquivo js ou chamando uma interface de página, o servidor não se importa realmente com o método de relatório específico. Então, por que todos os sistemas usam uniformemente o método de solicitação de imagens GIF para relatar dados?
●Evitar vários domínios
De modo geral, o nome de domínio pontilhado não é o nome de domínio atual, portanto, todas as solicitações de interface constituirão solicitações entre domínios. Solicitações entre domínios podem ser facilmente interceptadas pelos navegadores devido a configurações inadequadas e erros de relatório, o que é inaceitável. No entanto, o atributo src da imagem não atravessa domínios e as solicitações também podem ser iniciadas. (Excluir relatórios de interface)
●Evitar o bloqueio do carregamento da página e afetar a experiência do usuário
Normalmente, depois de criar um nó de recurso, o navegador não enviará realmente uma solicitação de recurso até que o objeto seja injetado na árvore DOM do navegador. Operar repetidamente o DOM não só causará problemas de desempenho, mas carregar recursos js/css também bloqueará a renderização da página e afetará a experiência do usuário.
A exceção são as solicitações de imagens. Além de não precisar ser inserido no DOM ao construir uma imagem, ele pode iniciar uma solicitação, desde que o novo objeto Image seja criado em js e não haja problemas de bloqueio em um ambiente de navegador sem js. também será gerenciado normalmente através da tag img, que é outro tipo de solicitação de recurso que não pode ser feito. (Excluir método de arquivo)
●Em comparação com PNG/JPG, o GIF tem o menor tamanho
O menor arquivo BMP requer 74 bytes, PNG requer 67 bytes e um GIF legal requer apenas 43 bytes.
Para a mesma resposta, o GIF pode economizar 41% do tráfego que o BMP e 35% do tráfego que o PNG.
E a maioria deles usa GIF transparente de 1 * 1 pixel para relatar.
1x1 pixel é a menor imagem legal. Além disso, por ser feito por meio de imagens, o melhor é deixar as imagens transparentes, para que não afete o efeito de exibição da própria página. Para indicar que a imagem é transparente, basta utilizar um bit binário para marcar. a imagem como uma cor transparente e não há necessidade de armazenar dados do espaço de cores, o que pode economizar volume.
vantagem:
Solicitações assíncronas podem ser enviadas e vários métodos HTTP, como GET e POST, são suportados.
Os resultados da resposta podem ser obtidos e processados posteriormente.
deficiência:
A lógica de solicitação e resposta precisa ser tratada manualmente.
Necessidade de lidar com problemas de solicitação entre domínios (como configuração de CORS).
Use XMLHttpRequest ou Fetch API para enviar solicitações assíncronas para relatar dados. Você pode optar por usar o método GET ou POST e enviar os dados como corpo da solicitação ou parâmetros de URL.
vantagem:
Bom desempenho em tempo real e suporta comunicação bidirecional.
Adequado para monitoramento em tempo real e relatórios de dados em grande escala.
deficiência:
O servidor precisa oferecer suporte ao protocolo WebSocket.
Mais complexo e não adequado para requisitos simples de pontos enterrados.
Ferramentas comuns de enterramento de dados front-end incluem Google Analytics, Baidu Statistics, Umeng Statistics, etc. Claro, você também pode usar a interface interna ou plataforma da empresa para relatórios.
Veja o Google Analytics como exemplo:
O Google Analytics é uma ferramenta de análise de sites desenvolvida pelo Google para rastrear e relatar o tráfego do site. Ajuda os proprietários de sites a compreender o comportamento de seus visitantes, incluindo quem eles são, de onde vêm, o que fazem no site e muito mais. Através do Google Analytics, os proprietários de websites podem compreender melhor o seu público, otimizar o conteúdo do website e as estratégias de marketing, melhorando assim o desempenho do website e a experiência do utilizador. O Google Analytics oferece diversas funções de análise de dados, incluindo dados em tempo real, análise do comportamento do usuário, acompanhamento de conversões, análise de origem de tráfego e muito mais. É uma ferramenta poderosa e amplamente utilizada em diversos sites e campanhas de marketing online.
Como usamos o Google Analytics, primeiro precisamos ter uma conta do Google, que você mesmo precisa criar. Em segundo lugar, você precisa saber a entrada do Google Analytics. Aqui estão os dois endereços utilizados:
Gerenciador de tags do Google: tagmanager.google.com/
Análise:analytics.google.com/
Gerenciador de tags do Google
Google Tag Manager (GTM) é um sistema de gerenciamento de tags desenvolvido e fornecido pelo Google. Ele permite que administradores de sites gerenciem e implantem vários códigos de rastreamento, códigos analíticos e tags de marketing sem modificar o código do site. Com o GTM, os usuários podem facilmente adicionar, atualizar e excluir tags sem depender dos desenvolvedores.
Os principais recursos do GTM incluem:
Em inglês simples: esta plataforma é usada para coletar eventos ocultos acionados pelo front-end e pode realizar relatórios de dados personalizando condições de acionamento e retornos de chamada de eventos de acionamento. É usada aqui para coletar dados e relatá-los ao Google Analytics.
Análise do Google
Como o nome sugere, é um site usado para coletar, visualizar e exibir dados