1. Visão geral
Neste codelab, você aprenderá a usar o Monitoramento de desempenho do Firebase para medir o desempenho de um app da Web de chat. Acesse https://fireperf-friendchat.web.app/ (link em inglês) para ver uma demonstração ao vivo.
O que você aprenderá
- Como adicionar o Monitoramento de desempenho do Firebase ao seu app da Web para receber métricas prontas para uso (carregamento de página e solicitações de rede).
- Como medir um trecho específico de código com rastros personalizados.
- Como registrar outras métricas personalizadas vinculadas a um trace personalizado.
- Como segmentar ainda mais seus dados de performance com atributos personalizados.
- Como usar o painel de monitoramento de desempenho para entender o desempenho do seu app da Web.
Pré-requisitos
2. Acessar o exemplo de código
Clone o repositório do GitHub do codelab na linha de comando:
git clone https://github.com/firebase/codelab-friendlychat-web
Como alternativa, se você não tiver o git instalado, faça o download do repositório como um arquivo ZIP.
Importar o app inicial
Usando seu ambiente de desenvolvimento integrado, abra ou importe o diretório 📁 performance-monitoring-start
do repositório clonado. O diretório 📁 performance-monitoring-start
contém o código inicial do codelab, que é um app de chat da Web.
3. Criar e configurar um projeto do Firebase
Criar um projeto do Firebase
- No Console do Firebase, clique em Adicionar projeto.
- Nomeie seu projeto do Firebase como
FriendlyChat
.
Lembre-se do ID do seu projeto do Firebase.
- Clique em Criar projeto.
Adicionar um app da Web do Firebase ao projeto
- Clique no ícone da Web para criar um novo app da Web do Firebase.
- Registre o app com o apelido
Friendly Chat
e marque a caixa ao lado de Também configurar o Firebase Hosting para este app. - Clique em Registrar app.
- Clique nas etapas restantes. Você não precisa seguir as instruções na tela agora. Elas serão abordadas nas próximas etapas deste codelab.
Ativar o Login do Google para o Firebase Authentication
Para permitir que os usuários façam login no app de chat com as Contas do Google deles, usaremos o método de login Google.
É necessário ativar o Login do Google:
- No Console do Firebase, localize a seção Desenvolver no painel esquerdo.
- Clique em Autenticação e na guia Método de login ( acesse o console).
- Ative o provedor de login do Google e clique em Salvar.
Ativar o Cloud Firestore
O app da Web usa o Cloud Firestore para salvar e receber novas mensagens de chat.
Você precisará ativar o Cloud Firestore:
- Na seção Desenvolver do Console do Firebase, clique em Banco de dados.
- Clique em Criar banco de dados no painel do Cloud Firestore.
- Selecione a opção Iniciar no modo de teste e clique em Ativar depois de ler a exoneração de responsabilidade sobre as regras de segurança.
O código inicial deste codelab inclui regras mais seguras. Vamos implantá-los mais adiante no codelab.
Ativar o Cloud Storage
O app da Web usa o Cloud Storage para Firebase para armazenar, fazer upload e compartilhar imagens.
É necessário ativar o Cloud Storage:
- Na seção Desenvolver do Console do Firebase, clique em Armazenamento.
- Clique em Começar.
- Leia a exoneração de responsabilidade sobre as regras de segurança do seu projeto do Firebase e clique em Entendi.
O código inicial inclui uma regra de segurança básica, que vamos implantar mais adiante no codelab.
4. Instalar a interface de linha de comando do Firebase
A interface de linha de comando (CLI) do Firebase permite usar o Firebase Hosting para disponibilizar seu app da Web localmente e implantar no projeto do Firebase.
- Instale a CLI seguindo estas instruções nos documentos do Firebase.
- Execute o comando a seguir em um terminal para verificar se a CLI foi instalada corretamente:
firebase --version
A CLI do Firebase precisa estar na versão v8.0.0 ou mais recente.
- Autorize a CLI do Firebase executando o seguinte comando:
firebase login
Configuramos o modelo de app da Web para extrair a configuração do Firebase Hosting do diretório local do app (o repositório clonado anteriormente no codelab). No entanto, para extrair a configuração, precisamos associar seu app ao projeto do Firebase.
- Verifique se a linha de comando está acessando o diretório local
performance-monitoring-start
do app. - Associe o app ao projeto do Firebase executando o seguinte comando:
firebase use --add
- Quando solicitado, selecione o ID do projeto e dê um alias a ele.
Um alias será útil se você tiver vários ambientes (produção, preparo etc.). No entanto, neste codelab, vamos usar apenas o alias de default
.
- Siga as instruções restantes na linha de comando.
5. Integrar com o Monitoramento de desempenho do Firebase
Há várias maneiras de fazer a integração com o SDK do Monitoramento de desempenho do Firebase para Web. Para mais detalhes, consulte a documentação. Neste codelab, vamos ativar o monitoramento de desempenho em URLs do Hosting.
Adicionar monitoramento de desempenho e inicializar o Firebase
- Abra o arquivo
src/index.js
e adicione a linha abaixo doTODO
para incluir o SDK do Monitoramento de desempenho do Firebase.
index.js
// TODO: Import the Firebase Performance Monitoring library here.
import {
getPerformance,
trace
} from 'firebase/performance';
- Também precisamos inicializar o SDK do Firebase com um objeto de configuração que contenha informações sobre o projeto do Firebase e o app da Web que queremos usar. Como estamos usando o Firebase Hosting, é possível importar um script especial que vai fazer essa configuração para você. Neste codelab, já adicionamos a linha a seguir na parte de baixo do arquivo
public/index.html
, mas confira se ela está lá.
index.html
<!-- This script is created by webpack -->
<script type="module" src="scripts/main.js"></script>
- No arquivo
src/index.js
, adicione a linha a seguir abaixo deTODO
para inicializar o monitoramento de desempenho.
index.js
// TODO: Initialize Firebase Performance Monitoring.
getPerformance();
O Monitoramento de desempenho agora coletará automaticamente métricas de carregamento de página e de solicitação de rede para você quando os usuários usarem seu site. Consulte a documentação para saber mais sobre traces de carregamento de página automático.
Adicionar a biblioteca de polyfill de First Input Delay
O First Input Delay é útil, já que a resposta do navegador a uma interação do usuário fornece aos usuários as primeiras impressões sobre a capacidade de resposta do app.
O First Input Delay começa quando o usuário interage pela primeira vez com um elemento na página, como clicar em um botão ou hiperlink. Ela é interrompida imediatamente quando o navegador fica disponível para responder à entrada, já que isso significa que ele não está ocupado carregando ou analisando seu conteúdo.
Essa biblioteca de polyfill é opcional para a integração do monitoramento de desempenho.
Abra o arquivo public/index.html
e remova a marca de comentário da linha a seguir.
index.html
<!-- TODO: Enable First Input Delay polyfill library. -->
<script type="text/javascript">!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script>
Neste ponto, você concluiu a integração com o Monitoramento de desempenho do Firebase no seu código.
Nas etapas a seguir, você aprenderá a adicionar traces personalizados usando o Monitoramento de desempenho do Firebase. Se você quiser coletar apenas os traces automáticos, acesse "Implantar e começar a enviar imagens" nesta seção.
6. Adicionar um rastro personalizado ao app
O Monitoramento de desempenho permite criar rastros personalizados. Um trace personalizado é um relatório da duração de um bloco de execução no app. Você define o início e o fim de um rastro personalizado usando as APIs fornecidas pelo SDK.
- No arquivo
src/index.js
, acesse um objeto de performance e crie um rastro personalizado para fazer upload de uma mensagem de imagem.
index.js
// TODO: Create custom trace to monitor image upload.
const t = trace(perf, "saveImageMessage");
- Para gravar um trace personalizado, especifique os pontos inicial e de parada dele. Pense nos rastros como um cronômetro.
index.js
// TODO: Start the "timer" for the custom trace.
t.start();
...
// TODO: Stop the "timer" for the custom trace.
t.stop();
Você definiu um trace personalizado. Após a implantação do código, a duração do rastro personalizado será registrada se um usuário enviar uma mensagem de imagem. Isso dará uma ideia de quanto tempo usuários reais levam para enviar imagens no seu app de chat.
7. Adicione uma métrica personalizada ao seu app.
É possível configurar ainda mais um rastro personalizado para registrar métricas personalizadas de eventos relacionados ao desempenho que ocorrem no escopo. Por exemplo, é possível usar uma métrica para investigar se o tempo de upload é afetado pelo tamanho de uma imagem para o trace personalizado definido na última etapa.
- Localize o rastro personalizado da etapa anterior (definido no arquivo
src/index.js
). - Adicione a linha a seguir abaixo de
TODO
para registrar o tamanho da imagem enviada.
index.js
...
// TODO: Record image size.
t.putMetric('imageSize', file.size);
...
Essa métrica permite que o monitoramento de desempenho registre a duração do trace personalizado e o tamanho da imagem enviada.
8. Adicionar um atributo personalizado ao app
Seguindo as etapas anteriores, também é possível coletar atributos personalizados nos traces personalizados. Os atributos personalizados podem ajudar a segmentar dados por categorias específicas do seu app. Por exemplo, é possível coletar o tipo MIME do arquivo de imagem para investigar como ele pode afetar o desempenho.
- Use o rastro personalizado definido no arquivo
src/index.js
. - Adicione a linha a seguir abaixo de
TODO
para registrar o tipo MIME da imagem enviada.
index.js
...
// TODO: Record image MIME type.
t.putAttribute('imageType', file.type);
...
Esse atributo permite que o Monitoramento de desempenho categorize a duração do trace personalizado com base no tipo de imagem enviada.
9. [Extend] Adicionar um trace personalizado com a API User Timing
O SDK do Monitoramento de desempenho do Firebase foi criado para que pudesse ser carregado de forma assíncrona, evitando um impacto negativo no desempenho dos apps da Web durante o carregamento da página. Antes do carregamento do SDK, a API Monitoramento de desempenho do Firebase não fica disponível. Nesse cenário, ainda é possível adicionar traces personalizados usando a API User Timing. O SDK de desempenho do Firebase selecionará as durações de measure() e as registrará como traces personalizados.
Vamos medir a duração do carregamento de scripts de estilo de app usando a API User Timing.
- No arquivo
public/index.html
, adicione a linha abaixo para marcar o início do carregamento dos scripts de estilo do app.
index.html
<!-- TODO: Mark the starting of `timer` for loading App Styling script. -->
<script type="text/javascript">performance && performance.mark('loadStylingStart');</script>
- Adicione as linhas abaixo para marcar o fim do carregamento dos scripts de estilo de app e para medir a duração entre o início e o fim.
index.html
<!-- TODO: Mark the ending of `timer` for loading App Styling script. Measure the duration from start to end. -->
<script type="text/javascript">
performance && performance.mark('loadStylingEnd');
performance && performance.measure('loadStyling', 'loadStylingStart', 'loadStylingEnd');
</script>
A entrada criada aqui será coletada automaticamente pelo Monitoramento de desempenho do Firebase. Você vai encontrar um trace personalizado loadStyling
no Console do Firebase Performance mais tarde.
10. Implante e comece a enviar imagens
Implantar no Firebase Hosting
Depois de adicionar o Monitoramento de desempenho do Firebase ao código, siga estas etapas para implantá-lo no Firebase Hosting:
- Confira se a linha de comando está acessando o diretório
performance-monitoring-start
local do seu app. - Implante os arquivos no projeto do Firebase executando o seguinte comando:
firebase deploy
- O console vai exibir o seguinte:
=== Deploying to 'friendlychat-1234'...
i deploying firestore, storage, hosting
i storage: checking storage.rules for compilation errors...
✔ storage: rules file storage.rules compiled successfully
i firestore: checking firestore.rules for compilation errors...
✔ firestore: rules file firestore.rules compiled successfully
i storage: uploading rules storage.rules...
i firestore: uploading rules firestore.rules...
i hosting[friendlychat-1234]: beginning deploy...
i hosting[friendlychat-1234]: found 8 files in ./public
✔ hosting[friendlychat-1234]: file upload complete
✔ storage: released rules storage.rules to firebase.storage/friendlychat-1234.appspot.com
✔ firestore: released rules firestore.rules to cloud.firestore
i hosting[friendlychat-1234]: finalizing version...
✔ hosting[friendlychat-1234]: version finalized
i hosting[friendlychat-1234]: releasing new version...
✔ hosting[friendlychat-1234]: release complete
✔ Deploy complete!
Project Console: https://console.firebase.google.com/project/friendlychat-1234/overview
Hosting URL: https://friendlychat-1234.firebaseapp.com
- Acesse seu app da Web que agora está totalmente hospedado usando o Firebase Hosting em dois dos seus subdomínios do Firebase:
https://<projectId>.firebaseapp.com
ehttps://<projectId>.web.app
.
Verifique se o monitoramento de desempenho está ativado
Abra o Console do Firebase e acesse a guia Desempenho. Se aparecer uma mensagem de boas-vindas com a mensagem "SDK detectado", a integração com o Monitoramento de desempenho do Firebase foi concluída.
Enviar mensagem com imagem
Gere dados de performance enviando imagens no seu app de chat.
- Após fazer login no app de chat, clique no botão de upload de imagem .
- Escolha um arquivo de imagem usando o seletor de arquivos.
- Envie várias imagens (algumas amostras são armazenadas em
public/images/
) para que você possa testar a distribuição de métricas e atributos personalizados.
As novas mensagens vão aparecer na interface do app com as imagens selecionadas.
11. Monitorar o painel
Depois de implantar seu app da Web e enviar mensagens de imagem como um usuário, é possível analisar os dados de desempenho no painel de monitoramento de desempenho (no console do Firebase).
Acessar o painel
- No Console do Firebase, selecione o projeto que tem seu app
Friendly Chat
. - No painel à esquerda, localize a seção Qualidade e clique em Performance.
Analisar dados no dispositivo
Depois que o monitoramento de desempenho processar os dados do app, você verá guias na parte superior do painel. Se você não encontrar dados ou guias, verifique novamente mais tarde.
- Clique na guia No dispositivo.
- A tabela A página é carregada mostra as diversas métricas que o Monitoramento de desempenho coleta automaticamente enquanto sua página é carregada.
- A tabela Durações mostra todos os traces personalizados que você definiu no código do app.
- Clique em saveImageMessage na tabela Durações para analisar as métricas específicas do trace.
- Clique em Agregar para analisar a distribuição dos tamanhos de imagem. É possível ver a métrica que você adicionou para medir o tamanho da imagem do trace personalizado.
- Clique em Ao longo do tempo ao lado de Agregar na etapa anterior. Também é possível ver a Duração do trace personalizado. Clique em Ver mais para analisar os dados coletados com mais detalhes.
- Na página que será aberta, você pode segmentar os dados de duração por tipo MIME de imagem clicando em imageType. Esses dados específicos foram registrados devido ao atributo imageType que você adicionou ao seu rastro personalizado.
Analisar os dados de rede
Uma solicitação de rede HTTP/S é um relatório que captura o tempo de resposta e o tamanho do payload das chamadas de rede.
- Volte para a tela principal do painel de monitoramento de desempenho.
- Clique na guia Rede para conferir uma lista de entradas de solicitação de rede para seu app da Web.
- Navegue por elas para identificar solicitações lentas e comece a trabalhar em uma correção para melhorar o desempenho do seu app.
12. Parabéns!
Você ativou o SDK do Firebase para monitoramento de desempenho e coletou traces automáticos e personalizados para avaliar o desempenho real do seu app de chat.
O que vimos:
- Adicionar o SDK do Monitoramento de desempenho do Firebase ao seu app da Web.
- Adicionar traces personalizados ao código.
- Registro de métricas personalizadas vinculadas ao rastro personalizado
- Segmentação de dados de desempenho usando atributos personalizados.
- Entender como usar o painel de monitoramento de desempenho para ter insights sobre o desempenho do seu app.
Saiba mais:
- firebase.google.com (link em inglês)
- firebase.google.com/docs/perf-mon/get-started-web (link em inglês)
- web.dev/fast/ (link em inglês)