Created
February 14, 2019 20:12
-
-
Save zxdcm/7c979efa81708853f20f6e4cfd8bf0b5 to your computer and use it in GitHub Desktop.
Browser common ideas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Browser components: | |
1. UI | | |
↓ | | |
2. Browser Engine ========================|===========> data persistance | |
3. Rendering Engine ↓ (25) | |
4. Networking 5. JS Interpreter 6. UI Backend | |
Chrome uses several display modules | |
Display modules: | |
webkit | |
gecko | |
8 kb frames | |
scheme: parse html & create dom => render dom => layout tree on page => paint the tree | |
Painting might start even before dom analyzed & created | |
Dom tree - AST | |
AST produced by lexer (parse tokens) and syntax analyser (build tree) | |
Asc and Desc syntax analyzers | |
грамматика HTML - не является бесконтекстной (из-за мягких правил к закрытию тегов) | |
=> анализаторами не распарсить => нельзя парсить регулярками. | |
XML - можно парсить | |
Лексический анализатор - конечный автомат (КА) | |
Построение дерева: | |
Первое состояние -> before html -> before head -> in head -> | |
after head -> in body -> ... -> EOF | |
(даже если нет html, head, body - все равно строятся) | |
После анализа - можно подгружать скрипты | |
Анализатор так же правит некоторые ошибки (</br> вместо <br> и тд) | |
CSS | |
CSS использует бесконечную граматику -> можно нормально парсить | |
p, div{ | |
margin-top: 3px; | |
.error{ | |
..} | |
} | |
CSSStyleSheet | |
↓ ↓ | |
CSSRule CssRule | |
↓ | |
selectors ↓declaration | |
↓ ↓ | |
p ... margin-top, 3px | |
Дерево отображения: | |
Невизуальные элементы не включается в дерево отображения + те у которых display = hidden | |
Порядок приоритета таблиц стилей | |
По возрастанию | |
1. Объявления браузера | |
2. Обычные объявления пользователя | |
3. Обычные объявление автора | |
4. Важные обяявления автора | |
5. Важные объявления пользователя | |
Компоновка (reflow, layout) | |
Определение размеров, положения | |
Система "грязных битов" | |
Измененные элементы помечаются как грязные и требующие перекомпоновки | |
Глобальная компановка - для всего дерева | |
(изменение шрифта, размеров экрана) | |
Инкрементая - только грязные объекты отображения | |
( ^ выполняется асинхронно, помещается таска в очередь) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment