Transcript
Page 1: Роман Комаров — «Механизм работы браузера»
Page 2: Роман Комаров — «Механизм работы браузера»

Разработчик Интерфейсов

Механизм работы браузераРоман Комаров

Page 3: Роман Комаров — «Механизм работы браузера»

Основная задача браузера: запросить и отобразить данные

3

Page 5: Роман Комаров — «Механизм работы браузера»

• Парсинг HTML — построение DOM-дерева.• Построение render tree (дерева отображения).• Reflow / Layout (Компоновка).• Repaint (Отрисовка).

Движок отображения

Page 6: Роман Комаров — «Механизм работы браузера»

Парсинг HTML и CSS

Page 7: Роман Комаров — «Механизм работы браузера»

Основа популярности HTML&CSS — прощающая обработка ошибок

7

Page 8: Роман Комаров — «Механизм работы браузера»

Парсинг HTML и CSS

• браузеры всеядны;• последствия ошибок часто не очевидны;• валидатор — инструмент, не более.

8

Page 9: Роман Комаров — «Механизм работы браузера»

<p>Параграф не закрылся, но это нормально

<blah> Не описанный в спецификациях тег — тоже ок.</blah>

<ul> <li>Элементы списка не обязаны закрываться <li>и иногда это может быть даже удобно: <ul> <li>Простой вложенный список </ul> <li>А это исходный список </ul></ul>

Можно писать невалидный HTML — браузеры это поймут:

9

Page 10: Роман Комаров — «Механизм работы браузера»

Валидатор — не «закон». Но с валидным кодом легче искать свои ошибки.

10

Page 11: Роман Комаров — «Механизм работы браузера»

Парсинг HTML и CSS

• неверный HTML может заметно изменить структуру конечного DOM;

• неверный CSS может или не отобразиться или «съесть» половину стилей.

11

Page 12: Роман Комаров — «Механизм работы браузера»

Было:

<table> <td>Ячейка таблицы</td> <div>Внезапно, див</div></table>

Ошибочный HTML может заметно изменить структуру конечного DOM

12

Стало:

<div>Внезапно, див</div><table> <tbody> <tr> <td>Ячейка таблицы</td> </tr> </tbody></table>

Page 13: Роман Комаров — «Механизм работы браузера»

.foo { width: 10em height: 10em; background: red;}.bar { width: 10bem; height: 10em; background: red;

.baz { width: 10em; height: 10em; background: red;}

Неверный CSS не отобразится или «съест» половину стилей

13

Page 14: Роман Комаров — «Механизм работы браузера»

.foo { width: 10em height: 10em; background: red;}.bar { width: 10bem; height: 10em; background: red;

.baz { width: 10em; height: 10em; background: red;}

Неверный CSS не отобразится или «съест» половину стилей

14

Page 15: Роман Комаров — «Механизм работы браузера»

.foo { background: red;}.bar { height: 10em; background: red;}

Неверный CSS не отобразится или «съест» половину стилей

15

Page 16: Роман Комаров — «Механизм работы браузера»

• Синхронность скриптов• Параллельная загрузка остальных данных• Таблицы стилей

Порядок обработки

Page 17: Роман Комаров — «Механизм работы браузера»

Render tree

Page 18: Роман Комаров — «Механизм работы браузера»

Render tree

Render tree может отличаться от DOM-дерева:

• не все блоки из DOM попадают в дерево отображения;

• в некоторых случаях в render tree будет создаваться больше блоков, чем есть в DOM;

• CSS уже начинает оказывать влияние.

18

Page 19: Роман Комаров — «Механизм работы браузера»

<head> <title>Шапка не отобразится</title></head>

<body> <noscript> Если JS работает — noscript не отобразится </noscript></body>

<div style="display: none;"> Некоторые стили «выключают» блоки из дерева отображения</div>

Не все блоки из DOM попадают в дерево отображения

19

Page 20: Роман Комаров — «Механизм работы браузера»

<div> Какой-то текстовый контент <div>Блочный элемент</div> Продолжение текстового контента</div>

В некоторых случаях в render tree будет создаваться больше блоков, чем есть в DOM

20

<div> <блок>Какой-то текстовый контент</блок> <div>Блочный элемент</div> <блок>Продолжение текстового контента</блок></div>

Page 21: Роман Комаров — «Механизм работы браузера»

Применение стилей

Page 22: Роман Комаров — «Механизм работы браузера»

Порядок применения стилей

• стили браузера• стили пользователя• стили автора• важные стили автора• важные стили пользователя

22

Page 23: Роман Комаров — «Механизм работы браузера»

Специфичность

• * 0,0,0,0,0• div, :first-line 0,0,0,0,1• .some-class, [rel] 0,0,0,1,0• #SomeID 0,0,1,0,0• style="" 0,1,0,0,0• div + !important 1,0,0,0,1• style="" + !important 1,1,0,0,0

23

Page 24: Роман Комаров — «Механизм работы браузера»

Reflow

Page 25: Роман Комаров — «Механизм работы браузера»

Reflow

• глобальный reflow

• инкрементный reflow

25

Page 26: Роман Комаров — «Механизм работы браузера»

Глобальный Reflow

• первоначальное отображение страницы• изменение размеров окна браузера• изменение размеров шрифта в браузере• и т.п.

26

Page 27: Роман Комаров — «Механизм работы браузера»

Инкрементный Reflow

• вставка новых элементов в DOM• изменение атрибутов (например, смена класса)• смена состояния

– наведение курсора на элемент– выбор чекбокса– фокус в поле текстового ввода

• и т.д.

27

Page 28: Роман Комаров — «Механизм работы браузера»

Рассчёт ширины

• Для auto и процентных величин нужно знать доступную ширину родителя.

• Есть несколько блочных моделей: в стандартной в ширину не входят маджины, паддинги и бордеры.

28

Page 29: Роман Комаров — «Механизм работы браузера»

Потоки

• Абсолютное позиционирование • Стандартный поток• «Плавающий» поток• …и нельзя забывать про inline-block

29

Page 30: Роман Комаров — «Механизм работы браузера»

Стандартный поток

30

Page 31: Роман Комаров — «Механизм работы браузера»

Абсолютное позиционирование

31

Page 32: Роман Комаров — «Механизм работы браузера»

Плавающие блоки

32

Page 33: Роман Комаров — «Механизм работы браузера»

Инлайновые блоки

33

Page 34: Роман Комаров — «Механизм работы браузера»

Repaint

Page 35: Роман Комаров — «Механизм работы браузера»

Порядок repaint

• цвет фона• фоновое изображение• граница• тень• вложенные элементы• outline

35

Page 37: Роман Комаров — «Механизм работы браузера»

Чем меньше область reflow или repaint и чем реже происходит их пересчёт — тем лучше.

37

Page 39: Роман Комаров — «Механизм работы браузера»

Разработчик интерфейсов

[email protected]@ki_zu

Спасибо

Роман Комаров


Recommended