Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HTMLSP - Navegadores por de baixo dos panos

HTMLSP - Navegadores por de baixo dos panos

Ana Luiza Portello

April 25, 2019
Tweet

More Decks by Ana Luiza Portello

Other Decks in Programming

Transcript

  1. Estrutura high level do navegador Como funciona o parser do

    navegador Fluxo renderização de paginas web Otimizações de critical render path
  2. Apresentar o conteúdo requisitado de um servidor de acordo com

    a especificação do HTML CSS(W3C) e servindo em uma janelinha
  3. 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)
  4. 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; }
  5. 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>
  6. 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
  7. GRAMMARS REGRAS DE SYNTAX QUE O DOCUMENTO DEVE SEGUIR DE

    ACORDO COM A LINGUAGEM TODA LINGUAGEM TEM UMA GRAMATICA DETERMINISTICA(VOCABULARIO)
  8. 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”.
  9. ANALISE LEXICA (SE O VOCABULARIO FAZ SENTIDO) ANALISE SINTATICA (SE

    FAZ SENTIDO) Oi Ash87h12d Oi tudo bom? ? oi tudo
  10. ANALISE LEXICA Com as regras da gramática quebra o código

    em tokens internamente que definem suas propriedades e regras.
  11. Dentro do HTML tenho inicio de tags, fim de tags,

    nomes de tributos e valores de atributos
  12. 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
  13. ANALISE SINTATICA É responsável por construir uma árvore de nós

    analisando se a estrutura do documento está de acordo com as regras sintáticas
  14. h1 [] [ text “Olá mundo”] p [ class =”alert”]

    [ text “tudo bem?”] <div> <h1>Olá</h1> <div> <img src=”dog1.png”> <img src=”dog2.png”> </div> </div>
  15. 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.
  16. 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
  17. “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.
  18. h1 [] [ text “Olá mundo”] p [ class =”alert”]

    [ text “tudo bem?”] h1 { color: red } CSSStyleElement CSSRule Selectors h1 Declaration Color red
  19. Com a DOM e a CSSOM juntos o navegador consegue

    criar a árvore de renderização.
  20. 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.
  21. 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.
  22. BODY IMG H1 Color: Red; HEAD HTML RENDER TREE Posição:

    (0,0) Dimensão: Viewport Dimensão: Block
  23. PAINTING A camada UI Backend tem o papel de atravessar

    cada elemento da render tree desenhando usando toda a UI da página.
  24. 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.
  25. Para melhorar a experiência do usuário 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
  26. Série de eventos envolvendo baixar resources html css e scripts,

    processar e renderizar o primeiro pixel na tela.
  27. Se a página 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
  28. 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
  29. 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.
  30. 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.
  31. <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.
  32. 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.
  33. <link href="style.css" rel=”stylesheet” media=”orientation:portrait”> Dependendo da orientação do dispositivo bloqueia

    a renderização do navegador até que o recurso seja retornado. <link href="style.css" rel=”stylesheet” media=”print”> Só aplica o CSS quando a página está sendo já gravada. Portanto é não bloqueante.
  34. <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
  35. Se você tem CERTEZA que vai usar essa conecção <link

    rel=”preconnect” href=”https://lalala.com”>
  36. as

  37. 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. SVGS para logos.
  38. 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');
  39. 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.
  40. 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