Slide 1

Slide 1 text

BROWSER RENDER PATH

Slide 2

Slide 2 text

Diego Eis I love work with web. And I lost 37 pounds. ;-) @diegoeis @tableless http://tableless.com.br http://medium.com/@diegoeis http://slideshare.net/diegoeis

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

http://bit.ly / livro-como-ser-frontend

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

LOCAWEB OPEN SOURCE locaweb.github.io

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

performance as a feature

Slide 9

Slide 9 text

Processo O browser segue uma série de passos para transformar os dados da sua página em pixels na tela.

Slide 10

Slide 10 text

DOM CSSOM RenderTree Layout Paint

Slide 11

Slide 11 text

Document Object Model Uma representação estruturada de documentos HTML e XML. Essa estrutura pode ser acessada por scripts e linguagens de programação, possibilitando a mudança de estrutura do documento, estilo e conteúdo.

Slide 12

Slide 12 text

Dados / Caracteres Tokens Nodes DOM

Slide 13

Slide 13 text

Dados / Caracteres DOM title> head>

Olá dev span> Maroto!

Slide 14

Slide 14 text

Tokens < html > StartTag: html / EndTag: html

Slide 15

Slide 15 text

Tokens StartTag: html StartTag: head tag: title tag: meta EndTag: head StartTag: body StartTag: p dev EndTag: body EndTag: html StartTag: span EndTag: span EndTag: p Olá maroto

Slide 16

Slide 16 text

html head body meta title p dev span maroto Olá Nodes DOM

Slide 17

Slide 17 text

HTML

Olá dev maroto!

Slide 18

Slide 18 text

DOM e JS O JavaScript não manipula o HTML, ele manipula o DOM. Você escreve JavaScript, mas usa o DOM para acessar o documento e seus elementos. O DOM não é uma linguagem de programação, mas sem ele, o JavaScript não teria um modelo da página para manipular.

Slide 19

Slide 19 text

paragraphs = document.getElementsByTagName("P"); console.log(paragraphs[0].nodeName); —— >> “P”

Slide 20

Slide 20 text

E a semântica?

Slide 21

Slide 21 text

CSSOM Basicamente o CSSOM é uma representação da formatação do documento. Ele lista as instruções e regras de estilos dos elementos.

Slide 22

Slide 22 text

Dados / Caracteres Tokens Nodes CSSOM

Slide 23

Slide 23 text

body {font-size: 16px; background-color: #ccc;} p {color: #fff;} span {border: 1px solid red;} Dados / Caracteres

Slide 24

Slide 24 text

body p font-size: 16px; background-color: #ccc; color: #fff; span border: 1px solid red; Nodes

Slide 25

Slide 25 text

CSSOM body p font-size: 16px; background-color: #ccc; color: #fff; font-weight: bold; div span color: #fff; color: #ccc; ul li list-style: none; font-size: 20px;

Slide 26

Slide 26 text

Por que o CSSOM tem formato de árvore? Quando o browser carrega todos os estilos dos objetos da página, o browser aplica os estilos da regra mais genérica, recursivamente, para a mais específica, refinando os estilos aplicados. Por isso o termo Cascading (Cascata) no nome CSS.

Slide 27

Slide 27 text

Cascata e Especificidade

Slide 28

Slide 28 text

body p font-size: 16px; background-color: #ccc; font-size: 16px; color: #fff; font-weight: bold; div span font-size: 16px; font-weight: bold; color: #fff; font-size: 16px; color: #ccc; ul li font-size: 16px; color: #ccc; font-size: 16px; color: #ccc; font-size: 20px;

Slide 29

Slide 29 text

1 Aplicação das regras básicas do Browser 2 Declarações customizadas do usuário 3 Declarações normais (genéricas) do dev 3.1 Regras mais específicas 3.2 !important

Slide 30

Slide 30 text

p { background: orange; } div.content p { background: red; } #main div.content p { background: blue; }

Slide 31

Slide 31 text

0 0 0 0 elementos IDs classes !important

Slide 32

Slide 32 text

0 0 1 2 div.content p 0 1 1 2 #main div.content p

Slide 33

Slide 33 text

p { background: orange !important; } div.content p { background: red; } #main div.content p { background: blue; }

Slide 34

Slide 34 text

p { background: orange !important; } div.content p { background: red !important; } #main div.content p { background: blue; }

Slide 35

Slide 35 text

p { background: orange !important; } div.content p { background: red !important; } #main div.content p { background: blue !important; }

Slide 36

Slide 36 text

Cuidado com o !important. Ele é coisa do capiroto!

Slide 37

Slide 37 text

RenderTree Quando o DOM e o CSSOM são calculados, os dois se juntam na RenderTree, onde são computados o layout de cada elemento visível no documento. 3

Slide 38

Slide 38 text

font-size: 16px; color: #fff; font-size: 16px; color: #fff; border: 1px solid red; p font-size: 16px; color: #fff; Olá span p span maroto Olá dev font-size: 16px; color: #fff; border: 1px solid red; span p maroto DOM dev CSSOM Render Tree

Slide 39

Slide 39 text

Somente os elementos visíveis

Slide 40

Slide 40 text

font-size: 16px; color: #fff; font-size: 16px; color: #fff; display: none; p font-size: 16px; color: #fff; Olá p span maroto Olá dev span p maroto DOM CSSOM Render Tree

Slide 41

Slide 41 text

visibility vs display A propriedade visibility é diferente da propriedade display. No caso do visibility, o elemento é renderizado, mas não é visível.

Slide 42

Slide 42 text

Layout Também conhecido como refluxo. Nessa fase o browser calcula o tamanho dos elementos e os posiciona. 4

Slide 43

Slide 43 text

header { width: 100%; } sidebar { width: 25%; } article { width: 75%; }

Slide 44

Slide 44 text

SIDEBAR 25% ARTICLE 75% HEADER 100%

Slide 45

Slide 45 text

Todas as medidas relativas são transformadas em medidas absolutas

Slide 46

Slide 46 text

SIDEBAR 250px ARTICLE 750px HEADER 1000px

Slide 47

Slide 47 text

IMAGEM Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras venenatis turpis nec diam tempus convallis eu ac lorem. Integer at ultrices velit, a ultricies odio. Donec eu ex luctus, maximus ante et, dictum leo. Proin ullamcorper ante id dolor viverra, id scelerisque arcu sodales. Maecenas est risus, blandit in nunc eu, ornare maximus est. Nunc nec erat et diam ultricies pellentesque consectetur non turpis. Quisque at auctor massa. Mauris a venenatis enim, nec maximus ex. In dictum odio nisl, eget commodo dui tristique id. Sed fringilla laoreet ligula at aliquam. Suspendisse sit amet nisi ligula. Cras viverra quis arcu mattis aliquet. Sed et nibh a nunc hendrerit interdum a ut lacus. Integer id turpis viverra ex vulputate tincidunt sit amet eget mauris. Praesent eu fermentum nunc, vitae scelerisque elit. Etiam vel eros libero. Phasellus et nunc lectus. Nulla sit amet iaculis felis, a dignissim ipsum. Sed consequat suscipit ipsum, quis euismod mauris commodo in. Fusce aliquet sollicitudin ultrices. Pellentesque vitae lorem mauris. Aliquam varius risus ut leo rutrum vehicula. Nulla tempor nisl mollis, facilisis arcu quis, tempus risus. Suspendisse sed turpis elit. Morbi dignissim sed metus nec luctus. Vestibulum interdum mattis aliquet. Duis facilisis mauris rutrum purus euismod pretium. Nam justo leo, lacinia id dapibus id, bibendum at neque. Sed finibus ipsum sed est commodo, in accumsan lacus luctus. Sed eget lobortis tellus. Aliquam tristique et orci nec ornare. Mauris eu vulputate eros. Etiam ac hendrerit leo, non imperdiet lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras venenatis turpis nec diam tempus convallis eu ac lorem. Integer at ultrices velit, a ultricies odio. Donec eu ex luctus, maximus ante et, dictum leo. Proin ullamcorper ante id dolor viverra, id scelerisque arcu sodales. Maecenas est risus, blandit in nunc eu, ornare maximus est.

Slide 48

Slide 48 text

Paint Sabendo o tamanho e a posição de cada elemento, agora o browser renderiza os pixels na tela.

Slide 49

Slide 49 text

1 background-color 2 background-image 3 border 4 Aí ele pinta o filho, seguindo os mesmos passos

Slide 50

Slide 50 text

1 Canvas / Root 2 Elemento descendente de Root 1 background-color 2 background-image 3 border 3 Elemento filho

Slide 51

Slide 51 text

Para definir a prioridade de pintura, o browser analisa a ordem dos elementos e seus filhos: quem está mais próximo do canvas, é pintado primeiro

Slide 52

Slide 52 text

canvas z-index: -1 0 1

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

Causando Reflow e Repaint

Slide 56

Slide 56 text

Reflow Quando você modifica qualquer coisa no DOM, como a posição dos elementos, quando você cria, remove ou esconde elementos com display: none. Essas tarefas fazem o browser ter que recalcular a geometria e a posição dos elementos e seus descendentes.

Slide 57

Slide 57 text

Repaint Ocorre quando você modifica qualquer característica visual dos elementos ou seus descendentes. Quando você muda background, font, borda, esconde com visibility, muda padding, margin, etc…

Slide 58

Slide 58 text

Resumo da parada louca

Slide 59

Slide 59 text

1 Inicia a construção do DOM parseando o HTML 2 Constrói o CSSOM parseando o CSS 3 Faz o merge do DOM e do CSSOM na Render Tree 4 Computa a geometria e posição de cada nó do HTML 5 Pinta os elementos individualmente na tela

Slide 60

Slide 60 text

1 Inicia a construção do DOM parseando o HTML 2 Faz o request do CSS e do JS que encontra no head 3 Constrói o CSSOM parseando o CSS 4 Executa o JS, porque ele pode modificar o DOM antes de virar HTML 5 Faz o merge do DOM e do CSSOM na Render Tree 6 Roda o Layout (calcula geometria e posição) e o Paint (mostra na tela)

Slide 61

Slide 61 text

CSS bloqueante Por padrão o CSS é um recurso que faz o browser pausar o processo de renderização do conteúdo até que o CSSOM seja construído. Mas o browser é esperto e entende quais CSS são bloqueadores.

Slide 62

Slide 62 text

Slide 63

Slide 63 text

JS bloqueante O JavaScript é bloqueante por que ele pode modificar o DOM e o CSSOM; A sua execução bloqueia o CSSOM; E também bloqueia o DOM, a menos que seja declarado como async.

Slide 64

Slide 64 text

<script defer> <script async> renderização download do JS execução do JS pausa na renderização

Slide 65

Slide 65 text

TL;DR

Slide 66

Slide 66 text

Ferramentas O inspector do Chrome é uma das melhores ferramentas para monitorar e analisar a render path do browser. O site WebPageTest também é um grande aliado.

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

Coloque o CSS no HEAD Todos os CSS devem ser especificados o mais cedo possível. Colocando no HEAD, o browser descobre seus CSS de maneira mais rápida.

Slide 70

Slide 70 text

Não use CSS imports O browser só descobre que há outros CSSs quando ele baixa o CSS com @import e parseia, só depois ele busca os arquivos de CSS importados.

Slide 71

Slide 71 text

Prefira JS com async JavaScript com async não bloquea a renderização do HTML e do CSSOM.

Slide 72

Slide 72 text

Use defer nos JS que não forem essenciais Qualquer script não essencial, ou seja, que não seja crítico para a construção inicial da página deve ser atrasado para economizar trabalho de renderização.

Slide 73

Slide 73 text

Goodbye! Let me know what you think! @diegoeis @tableless http://tableless.com.br http://medium.com/@diegoeis http://slideshare.net/diegoeis