Quando o SDK do Browser Monitoring do Application Real-Time Monitoring Service (ARMS) carrega de forma assíncrona, o envio de dados pode falhar se houver chamadas de método antes da conclusão da inicialização. Use o mecanismo __bl.pipe para enfileirar essas chamadas e permitir que o SDK as execute automaticamente após a inicialização.
Por que os dados são perdidos
Como o carregamento do SDK é assíncrono, há um intervalo entre o início da geração de dados de monitoramento pela página e o momento em que o SDK está pronto para processá-los. Dois cenários costumam causar esse problema:
Envio durante o carregamento da página: A página gera chamadas de API, visualizações de página (PV) ou mensagens personalizadas enquanto o script do SDK ainda está sendo baixado ou inicializado, ou quando não é possível determinar o resultado da inicialização.
Configuração antecipada: A lógica de inicialização do aplicativo chama setConfig antes que o SDK, carregado assincronicamente, esteja disponível.
Qualquer chamada de método do SDK feita durante esse intervalo pode falhar, a menos que você a armazene em buffer com __bl.pipe.
Enfileirar múltiplas chamadas
O SDK adiciona o atributo pipe ao objeto __bl para armazenar em cache as informações chamadas previamente. Atribua um array aninhado a __bl.pipe, em que cada array interno representa uma chamada de método do SDK: o primeiro elemento é o nome do método (string) e os demais são os parâmetros.
__bl.pipe = [
// Report the current HTML page as an API request.
// Equivalent to: __bl.api(api, success, time, code, msg)
['api', '/index.html', true, performance.now, 'SUCCESS'],
// Enable automatic single-page application (SPA) resolution after initialization.
['setConfig', {enableSPA: true}]
];
Após a conclusão da inicialização, o SDK reproduz cada chamada armazenada em cache, seguindo a ordem definida em window.__bl.pipe.
Enfileirar uma única chamada
Para uma única chamada do SDK, use um array simples em vez de um array aninhado:
__bl.pipe = ['msg', "I'm another generic message"];
Enfileirar em um aplicativo de página única
Em um aplicativo de página única (SPA) com autoSend: false, os dados de PV são enviados pela primeira vez após a inicialização do aplicativo. No entanto, nem sempre é possível determinar se a inicialização foi concluída. Use __bl.pipe para lidar com essa situação:
// Set the page name to "homepage" and report PV data.
__bl.pipe = ['setPage', 'homepage'];
Chamar pipe quando o estado de inicialização for incerto
Caso não tenha certeza se o SDK foi inicializado e queira evitar verificações condicionais complexas, chame o método pipe após a inicialização do SDK. Esse recurso é compatível com Internet Explorer 9 e versões posteriores.
Antes da conclusão da inicialização, cada atribuição a __bl.pipe substitui o valor anterior. Apenas o último valor atribuído é executado. Para armazenar múltiplas chamadas em buffer em uma única atribuição, use um array aninhado conforme demonstrado na seção Enfileirar múltiplas chamadas acima.