🧰
🔧
🔨
⛏
⚙️
Front-end @ Studio Sol
O maior plataforma de artistas independentes do Brasil.
+1.3M Músicas
+120K Artistas
+4B de downloads de músicas
🙏 Você tem que pedir
⏳ Esperar um pouco...
O servidor recebe a
requisição e "faz alguma
coisa"; enquanto isso você espera
🤲 A resposta do servidor chega no browser
Um pouquinho mais sobre HTTP:
HTTP: tem por que, tem pra que e é necessário entender!
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="style.css" rel="stylesheet">
<title>Critical Path</title>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
</body>
</html>
body { font-size: 16px }
p { font-weight: bold }
span { color: red }
p span { display: none }
img { float: right }
🌳
A partir da raiz da árvore DOM, percorre cada nó visível
Determina onde e como os elementos estão posicionados na página, determinando a largura e a altura de cada elemento e onde estão em relação um ao outro
🏢
Converte a Render Tree em pixels na tela. No first load, a tela inteira é pintada; depois disso, só as áreas impactadas na tela sofrem re-paint
🎨
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Aplicação super enorme com HTML pequeno</title>
</head>
<body>
<div id="root"></div>
<script src="/dist/main.js" charset="utf-8"></script>
</body>
</html>
O browser precisa:
Baixar todo HTML, CSS e JavaScript necessário
Interpretar e processar tudo isso
Renderizar
Operar no DOM e alterar toda sua estrutura
Tempo para a página se tornar totalmente interativa; depois que o layout se estabilizou, e a main thread está disponível
Mede quando o conteúdo principal de uma página está visível; paint efetuado após a maior alteração de layout
⏱
🎊
🎉
👀
Gera o HTML completo da página no servidor em resposta à navegação
Os dados são requisitados e tratados antes que o navegador obtenha uma resposta
Tempo do
First Meaningful Paint diminui drasticamente
🤔
Servidor com Express que irá receber as requisições e processar todo conteúdo
#SQN
{ target: "node" }
{ target: "web" }
O servidor precisa:
Receber a requisição
Montar/processar a aplicação e transformar tudo em uma string de HTML (ReactDOMServer.renderToString)
Enviar a resposta para o usuário
Resolver as pendências de dados externas
(ex.: chamadas de APIs)
A duração entre a solicitação HTTP do client até o primeiro byte da página que está sendo recebida
Quanto mais demandar de recursos externos, mais irá demorar!
⚠️
Dar vida ao conteúdo servido
Os dados utilizados para alimentar a aplicação no server servirão como bootstrap de dados do client
O React tentará ligar os event listeners à marcação HTML existente
Just because server rendering can make something show up sooner doesn't suddenly mean you have less work to do.