O documento apresenta informações sobre:
1) A estrutura e componentes principais de um navegador da web, incluindo a interface do usuário, engine do navegador, engine de renderização e componentes de rede.
2) O fluxo de renderização de páginas web, incluindo a construção da DOM a partir do HTML, CSSOM a partir do CSS e árvore de renderização.
3) Técnicas para otimizar o critical rendering path como priorizar recursos, async/defer scripts e code splitting.
14. BROWSER ENGINE
Intermedia UI e a engine de renderização
Responsavel por persistência dados(Cookies, LocalStorage,
IndexedDB).
Web APIs(canvas, WebSocket, Animation, WebWorkers,
WebGL)
29. h1 [] [ text “Olá mundo”]
p [ class =”alert”] [ text “tudo bem?”]<h1>Olá</h1>
<img src=”dog.png”>
h1 [] [ text “Olá mundo”]
p [ class =”alert”] [ text “tudo bem?”]h1 {
color: red;
}
30. BYTES
3C 62 6F 64 79 3E 48 65 6C 6C 6F 2C 20
3C 73 70 61 6E 3E 77 6F 72 6C 64 21 3C 2F
21 73 70 61 6E E 77 6F 72 6C 64 21 3C 2F 21
73 70 61 6E E 77 6F 72 6C 64 21 3C 2F 21 73
70 61 6E 3C 62 6F 64 79 3E 48 65 6C 6C 6F
2C 20 3C 73 70 E 77 6F 72 6C 64 21 3C 6E E
77 6E E8 77 B2 6E E 77 6E E8 77 B2 B1
CHARACTERS(UTF-8)
<html><head></head>
<body>
<h1>Olá</h1>
<p>tudo bem?</p>
</body>
</html>
32. PARSEAR
Parsear significa traduzir uma estrutura para algo que o
código possa usar.
O resultado geralmente é um árvore de nós que
representam a estrutura dos documentos
33. GRAMMARS
REGRAS DE SYNTAX QUE O DOCUMENTO DEVE SEGUIR DE
ACORDO COM A LINGUAGEM
TODA LINGUAGEM TEM UMA GRAMATICA
DETERMINISTICA(VOCABULARIO)
ISSO SE CHAMA “CONTEXT FREE GRAMMAR”
34. A engine começa a parsear o HTML e
converte-lo a “Nós da DOM”
Esses DOM nós se tornam uma arvore
chamada “content tree”.
41. Eu vou no intercon <body>Hello</body>
HTML
BODY
‘Hello’
?
42. h1 [] [ text “Olá mundo”]
p [ class =”alert”] [ text “tudo bem?”]<h1>Olá</h1>
<img src=”dog.png”>
<h1>
</h1>
l
á
StartTag: h1
EndTag: h1
Character Character
Character
O
TOKENS
<img>
ImageTag
49. O resultado final de todo esse processo é o Document Object
Model, ou "DOM", da nossa página simples, que é usado pelo
navegador para todos os demais processamentos da página.
51. Enquanto a DOM estava sendo renderizada nosso style.css é
encontrado referenciado em nosso head.
Assim como o HTML precisamos converter o CSS pelo mesmo
processo desta vez criando um “CSS Object Model” ou CSSOM
52. “Flex” e o”Bison” são parser generators do WebKit para parsear
automaticamente de arquivos com gramática CSS.
As regras de objetos CSS contêm seletores e a declaração dos
objetos correspondentes a gramática CSS.
53. h1 [] [ text “Olá mundo”]
p [ class =”alert”] [ text “tudo bem?”]
h1 {
color: red
}
CSSStyleElement
CSSRule
Selectors
h1
Declaration
Color red
54. No momento de calcular os estilos da página o navegador começa
com a regra mais aplicável(body) e logo em seguida vai refinando
para as regras mais específicas.
57. Com a DOM e a CSSOM juntos o navegador consegue
criar a árvore de renderização.
O navegador pinta cada nó da pagina.
Todo esse processo toma tempo e pode impactar na
performance da pagina web.
61. LAYOUT / REFLOW
Layout é o processo recursivo que começa da raiz da
arvore(<html>) e continua recursivamente por toda a
hierarquia do HTML computando informação geométrica de
que cara render requer
Dando as exatas coordenadas de onde cada nó deve aparecer
na tela.
71. O javascript pode criar e modificar todo o DOM ou o
CSSOM.
Quando o analisador do HTML encontra uma tag “script”
ela para toda a construção da DOM e só retoma quando
conclui a execução.
72. Para melhorar a experiencia do usuario o engine de
renderização vai tentar mostrar o conteúdo na tela assim
que possível então não espera que outro HTML seja
parseado até começar a construir a página
75. Série de eventos envolvendo
baixar resources html css e
scripts, processar e renderizar o
primeiro pixel na tela.
76. Se a pagina html contêm algum script altamente
bloqueante o render start, o tempo levado para
receber o primeiro byte de dados para o URL
primário, vai ser atrasado
77.
78.
79. A primeira visualização da página ou o que o
usuário vê é crítica para experiência do
usuário.
Tentar otimizar cada passo no critical render
path vai acelerar o processos de renderização
84. Otimizando a ordem de cada recurso crítico
baixado e fazendo lazy-loading recursos não
críticos podemos minimizar o tempo de total do
critical render path.
85. Digamos que você tem um arquivo Javascript:
<script src="test.js"></script>
Esse script também é bloqueante na renderização do navegador
pois aguarda até que o recurso seja retornado.
87. <script src="javascript.js" async></script>
Indica que é um asset não bloqueante então deve ser
executado de forma assíncrona(coisas pequenas ou
prioritárias).
<script src="javascript.js" defer></script>
Indica que o script só deve ser executado depois de toda a DOM
ser parseada.
88. Tanto o HTML quanto o CSS são recursos bloqueantes, ou seja,
não existe sem renderização sem que ambos tenham uma
arvore de renderização.
93. <link rel=”preload”>
Força o navegador a priorizar recursos que não devem ser
bloqueados
<link rel=”prefetch”>
Avisa o navegador que recurso até é importante em futuras
navegações mas não deve ser priorizado
95. Minimizar o tamanho dos bytes de
resources críticos pode reduzir o
overhead no processo de
renderização
96. IMAGENS
Existem técnicas de otimização de imagens para reduzir
o load time da página(compressão, escala, CSS sprites)
Prefira efeitos CSS como sombras ou gradientes para
evitar imagens.
103. SplitChunksPlugin
Separa código que é da aplicação e o que é utilitário
Listando bibliotecas como “vendor” faz com que se crie um
arquivo individual que o browser consegue cachear o
conteúdo com mais facilidade.
106. O code splitting permite que você divida seu código em
pequenos bundles que podem ser carregados sob
demanda ou em paralelo.
Com isso você tem bundles menores e controle de
prioridade sobre seus recursos.
108. ensure
Dynamic Import está em stage3 da proposal para o js
Plugin Babel (syntax-dynamic-import)
require.ensure([/* dependencies */], require => {
const Foo = require('foo');
}, error => {
// handle error
}, 'custom-bundle-name');
109.
110. Web Developers Google - Critical Rendering Path
developers.google.com/web/fundamentals/performance/critical-re
ndering-path/
How browsers work internally - Tali Garsiel - Front-Trends 2012
vimeo.com/44182484
How Browsers Work: Behind the scenes of modern web browsers
html5rocks.com/en/tutorials/internals/howbrowserswork