🔥

Тред (Сергей Ufocoder)


JavaScript и Браузер #тред
notion image

За 30 лет с момента появления 1ого браузера многое изменилось. Браузеры сегодня это очень сложное прикладное ПО. Об этом можно даже судить в 1ом приближении по кол-ву строк кода How Many Millions of Lines of Code Does It Take (February 8, 2017) visualcapitalist.com/millions-lines…
notion image

Ни для кого не станет открытием, если я напишу, что на текущий момент браузер Google Chrome, является самым популярным, более того, он занимает около 2/3 рынка. youtube.com/watch?v=W4wWdm…

Браузер Google Chrome (как Opera и Microsoft Edge), основаны на проекте Chromium. Отсюда изучая проект Chromium, в частности документацию Design Documents, вы погружаетесь в устройство современных браузеров. chromium.org/developers/des…

У chromuim multiprocess архитектура Используются отдельные процессы для вкладок браузера, что защитит все приложение от ошибок и сбоев при рендеринге. Ограничивается доступ из каждого процесса рендеринга до других процессов и остальной системы браузера medium.com/@zicodeng/expl…
notion image

Все то, что отображается во вкладке браузера, грубо говоря, делает движок для рендеринга - Blink, форк WebCore Blink реализует HTML спецификации, занимается работой с DOM деревом, пересчитывает стили и layout, встраивает V8 и запускает JavaScript и тд bit.ly/how_blink_works

Касательно процессов, пользователь вполне может их сам увидеть в "диспетчере задач" Google Chrome helgeklein.com/blog/2019/01/m…
notion image

Касательно HTML. Как правило, мнение обывателя относительно HTML, что это что-то про верстку, хотя сейчас это есть ни что иное как набор спецификаций, более того описывающий некоторые API HTML спеки: w3.org/TR/?title=html Картинка отсюда: de.wikipedia.org/wiki/HTML5
notion image

Важным понятием в рендеринге для Frontend-разработчика является - Critical Rendering Path. Процесс c момента получения HTML, CSS, JS до момента отрисовки пикселя на экране монитора слайды: bit.ly/lifeofapixel видео: bit.ly/loap-2018-video

Или вот, есть русская мини страничка о CRP на MDN: developer.mozilla.org/ru/docs/Web/Pe… Рекомендую БЕСПЛАТНЫЙ курс от Google разработчиков для понимания, что это, как его оптимизировать, чтобы ваше web-приложение было производительнее, если есть проблемы в CRP classroom.udacity.com/courses/ud884

1/2 Напомню, что Blink движок для рендеринга, V8 - JavaScript-движок. V8 ничего не знает о DOM. Как связаны V8 и Blink? Присутствует изолирование потоков, есть 3 вида (Main, Isolate, Worker). Есть понятие контекст - глобальный объект (на каждый iframe) bit.ly/how_blink_works
notion image

2/2 Есть понятие World для поддержки content scripts, необходимых для разделение DOM с веб-страничкой. Для разделения DOM тоже существует изоляция для безопасности. Плюс присутствует обертка над V8 APIs Подробности в Design Documents bit.ly/how_blink_works

Есть еще детали того встраивается V8, но повторюсь читайте Chromium Design Documents.. По итогу всех обвязок для JavaScript-мира в Chrome доступно множество API: упомянутый V8 API, XMLHttpRequest, HTML5 и связанные с ним API, WebKit API и так далее developer.chrome.com/extensions/api…

Как ни странно, но реализация именно HTML спецификации внутри браузера, дает JavaScript всеми любимый Event Loop. Описание модели вычислений Event Loop в спеке можно уместить в несколько печатных страниц html.spec.whatwg.org/multipage/weba…

За внедряемыми фичами JS можно следить как по отдельности v8: v8.dev/features blink: bit.ly/blinkintents так и за всеми сразу, как они попадают в Chrome: chromestatus.com/features chromestatus.com/features/sched…

В завершении треда хочу поделится русскоязычным докладом: "О настоящем и будущем браузера Yandex браузера". Довольно интересно было узнать о реализованных оптимизациях рендеринга в браузере youtube.com/watch?v=6OLVN_…

Две статьи от @xnimorz Оптимизация производительности фронтенда habr.com/ru/company/hh/… habr.com/ru/company/hh/…