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

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

CUSTIS
October 08, 2018

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

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

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