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

Alice in browserland

Alice in browserland

Todos sabemos qué pasa antes de que el navegador pida una página web: dns, request, response y ainda mais pero no siempre tenemos claro qué sucede desde que la página llega al navegador hasta que efectivamente se muestra en pantalla.

Cuáles son los procesos que permiten el renderizado de un sitio, cómo se construye el DOM tree y de qué manera impacta el event loop cuando programamos en javascript son algunas de las cosas que pueden ayudarnos a entender porqué hacemos lo que hacemos cuando desarrollamos para la web.

Gabriel Chertok

November 15, 2014
Tweet

Other Decks in Technology

Transcript

  1. “El browser es el encargado de pedir un recurso web

    al servidor y desplegarlo en la UI.”
  2. Flujo Principal Parseo de HTML para construir el DOM tree

    Cosntrucción del Render tree Layout del Render tree Pintar el render tree
  3. DOM tree <html>      <body>        

     <p>              Hello  World          </p>          <div>  <img  src="example.png"/></div>      </body>   </html> Tomada de: www.html5rocks.com/en/tutorials/internals/howbrowserswork/
  4. Cambiar el color de un nodo N ode C hildren

    S iblings P paint L ayout D ocument N P Cambiar la posición de un nodo N C S L P Agregar un nodo N L P Cambiar el tamaño de fuente del documento P L D
  5. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta');
  6. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text)
  7. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text) greet(name)
  8. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text) greet(name) capitalize(t)
  9. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text) greet(name)
  10. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text)
  11. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text) console.log(text)
  12. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta'); print(text)
  13. Stack main()    function  capitalize(t)  {        

     return  t.charAt(0).toUpperCase()  +  t.slice(1);      }      function  greet(name)  {        return  'Hello  '  +  capitalize(name);      }      function  print(text)  {          console.log(greet(text));      }      print('cherta');
  14. Web API’s main()    function  printUsers()  {      

     console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue Stack
  15. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue printUsers()
  16. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue printUsers() console.log…
  17. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue printUsers() fetch(response, logUsers)
  18. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue printUsers() fetch(response, logUsers) Magia Negra
  19. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue printUsers() console.log… Magia Negra
  20. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue printUsers() Magia Negra
  21. Stack Web API’s main()    function  printUsers()  {    

       console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue Magia Negra
  22. Stack Web API’s    function  printUsers()  {      

     console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue Magia Negra
  23. Stack Web API’s    function  printUsers()  {      

     console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue logUsers(response)
  24. Stack Web API’s    function  printUsers()  {      

     console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue logUsers(respon se)
  25. Stack Web API’s    function  printUsers()  {      

     console.log('before');        fetch('/users',  function  logUsers(response)  {            console.log(response.users);        });        console.log('after');      }      printUsers(); Task Queue logUsers(respon se)
  26. Artículo de Tali Grasiel & Paul Irish en html5rocks: http://

    www.html5rocks.com/en/tutorials/internals/howbrowserswork Bibliografía Philip Roberts talk What the heck is the event loop anyway? en youtube: https://www.youtube.com/watch?v=8aGhZQkoFbQ Concurrency model and Event Loop en la MDN: https:// developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop