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

Браузерные движки и их особенности в веб-прилож...

Avatar for CUSTIS CUSTIS
October 08, 2018

Браузерные движки и их особенности в веб-приложениях

Три презентации с выступлений наших фронтенд-разработчиков Надира Джилкибаева, Дениса Лобанова и Ильи Немировича на Frontend Conf (Москва, 4–5 октября 2018).

Avatar for CUSTIS

CUSTIS

October 08, 2018
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. Почему это нужно знать?  Раз дело любимое, знать надо

    все  Показатель квалификации  Оперативная диагностика 2 | 17
  2. Отображение страницы 1. Разбор HTML и построение DOM- и CSSOM-деревьев

    2. Построение дерева отображения 3. Построение макета 4. Отрисовка Происходит каждый раз, когда надо отобразить HTML-документ Спойлер: доклад про ускорение работы страницы на нашем стенде в 15:45 3 | 17
  3. Построение макета (Layout)  Определяются размеры и расположение блоков 

    Слева направо и сверху вниз  Поточная модель: большинство элементов в один проход. Но есть исключения 7 | 17
  4. Парсим URL, DNS-кэш 1. Определяем схему, домен, URI 2. Определяем

    IP-адрес домена 3. IP-адрес попадает в кэш 4. Осуществляется запрос к серверу При изменении IP-адреса домена бывают ситуации, когда старый IP остается в кэше и браузер делает обращения по старому адресу! 11 | 17
  5. Повторим про HTTP  Есть запрос и есть ответ 

    У запросов и ответов есть заголовки и тело  GET, POST, PUT, PATСH, DELETE, HEAD, OPTIONS  Можно придумывать свои заголовки  У ответов есть коды, и нужно не забывать про корректную обработку ответов 12 | 17
  6. HTTP, HSTS, HTTPS  Браузер проверяет наличие домена в чек-листе

    HTTPS  Запрос по HTTP и проверка HSTS-заголовков  Редирект на HTTPS  HTTP текстовый протокол, HTTPS/HTTP 2.0 – бинарные, зашифрованные 13 | 17
  7. Потоки  В современных браузерах на каждую вкладку выделяется свой

    поток для рендеринга и JavaScript  Сетевые запросы выполняются в отдельных потоках. Ограничение – 2-6 потоков на вкладку  Можно порождать свои потоки через воркеры 14 | 17
  8. Итог Зная, как процесс работы браузера устроен в глубину и

    в ширину, можно ловить баги зубами :-) 15 | 17
  9. Layout Paint Оптимизация выполнения JavaScript requestAnimationFrame вместо setTimeout и setInterval

    function updateScreen(time) { } requestAnimationFrame(updateScreen); JavaScript Style Composite 4 | 13
  10. Оптимизация выполнения JavaScript Используйте Web Worker var dataSortWorker = new

    Worker("sort-worker.js"); dataSortWorker.postMesssage(dataToSort); // The main thread is now free to continue working on other things... dataSortWorker.addEventListener('message', function(evt) { var sortedData = e.data; // Update data on screen... }); 5 | 13
  11. «Приблизительно 50% времени, которое тратится на вычисление стиля элемента, уходит

    на сопоставление селекторов, а вторую половину времени занимает построение RenderStyle (представления стиля) на основе сопоставленных правил». Rune Lillesveen, Opera Оптимизация CSS Layout Paint JavaScript Style Composite 6 | 13
  12. Оптимизация CSS .box:nth-last-child(-n+1) .title { /* styles */ } .final-box-title

    { /* styles */ } Снижайте сложность своих селекторов 7 | 13
  13. Layout Style JavaScript Оптимизация расчета макета Не используйте принудительный перерасчет

    макета requestAnimationFrame(logBoxHeight); function logBoxHeight() { console.log(box.offsetHeight); } box.classList.add('super-big'); JavaScript Layout Paint Composite Style 8 | 13
  14. Оптимизация расчета макета Принудительный перерасчет макета в цикле function resizeAllParagraphsToMatchBlockWidth()

    { // Puts the browser into a read-write-read-write cycle. for (var i = 0; i < paragraphs.length; i++) { paragraphs[i].style.width = box.offsetWidth + 'px'; } } 10 | 13
  15. Оптимизация расчета макета Принудительный перерасчет макета в цикле var width

    = box.offsetWidth; function resizeAllParagraphsToMatchBlockWidth() { for (var i = 0; i < paragraphs.length; i++) { paragraphs[i].style.width = width + 'px'; } } 11 | 13
  16. Оптимизация отрисовки  Перемещайте на отдельные слои элементы, которые двигаются

    или исчезают .moving-element { will-change: transform; }  Сокращайте области отрисовки 12 | 13 Layout Paint JavaScript Style Composite
  17. Что такое воркеры и куда их запихнуть? Илья Немирович Старший

    фронтенд-разработчик Frontend Conf 5 октября 2018 года
  18. Что воркеры умеют  navigator  location  indexedDB 

    XHR, websocket  importScripts  создание Worker 4 | 12
  19. Что воркеры не умеют  DOM  Объект window 

    Объект document  Объект parent  responseXML и channel возвращают null 5 | 12