За 30 лет с момента появления 1ого браузера многое изменилось. Браузеры сегодня это очень сложное прикладное ПО. Об этом можно даже судить в 1ом приближении по кол-ву строк кода
Ни для кого не станет открытием, если я напишу, что на текущий момент браузер Google Chrome, является самым популярным, более того, он занимает около 2/3 рынка.
Браузер Google Chrome (как Opera и Microsoft Edge), основаны на проекте Chromium. Отсюда изучая проект Chromium, в частности документацию Design Documents, вы погружаетесь в устройство современных браузеров.
Используются отдельные процессы для вкладок браузера, что защитит все приложение от ошибок и сбоев при рендеринге. Ограничивается доступ из каждого процесса рендеринга до других процессов и остальной системы браузера
Касательно HTML. Как правило, мнение обывателя относительно HTML, что это что-то про верстку, хотя сейчас это есть ни что иное как набор спецификаций, более того описывающий некоторые API
Рекомендую БЕСПЛАТНЫЙ курс от Google разработчиков для понимания, что это, как его оптимизировать, чтобы ваше web-приложение было производительнее, если есть проблемы в CRP classroom.udacity.com/courses/ud884
1/2 Напомню, что Blink движок для рендеринга, V8 - JavaScript-движок. V8 ничего не знает о DOM.
Как связаны V8 и Blink? Присутствует изолирование потоков, есть 3 вида (Main, Isolate, Worker). Есть понятие контекст - глобальный объект (на каждый iframe)
2/2 Есть понятие World для поддержки content scripts, необходимых для разделение DOM с веб-страничкой. Для разделения DOM тоже существует изоляция для безопасности.
Плюс присутствует обертка над V8 APIs
Есть еще детали того встраивается V8, но повторюсь читайте Chromium Design Documents..
По итогу всех обвязок для JavaScript-мира в Chrome доступно множество API: упомянутый V8 API, XMLHttpRequest, HTML5 и связанные с ним API, WebKit API и так далее
Как ни странно, но реализация именно HTML спецификации внутри браузера, дает JavaScript всеми любимый Event Loop. Описание модели вычислений Event Loop в спеке можно уместить в несколько печатных страниц
Если предпосылки слабой типизации в JavaScript были туманны, то решение сделать JavaScript динамическим языком было изначально. Это решение вдохновлено Self, Scheme и испытало на себе влияние Java, C.
Тяжело дать однозначное трактование динамической типизации, но можно через сравнение со статической. Переменные связываются с типов в момент объявления переменной - статическая типизация, при присваивании значения - динамическая типизация.
Давайте попробуем старую практику как мир: лайк этому посту от вас, факт про эффектор, его историю и концепции от меня. Посмотрим насколько меня хватит!
Изначально effector был миддлварой для ридакса и разрабатывался для высоконагруженного клиента реалтайм чата, вроде Телеграм.
Пока флоу не умер, имелась его первоклассная поддержка. Сейчас типы затачиваются под TypeScript.
Каким боком @effectorjs помогает выстроить архитектуру приложений? Очень просто: он является языком описания бизнес-логики. А еще и помогает связать логику с представлением.
К чему мы привыкли? Встраиваем управление состоянием внутрь React. И после этого продолжаем называть REACT библиотекой, хотя он уже давно ФРЕЙМВОРК.
Мне не нравится такое положение. Из-за возраста React нам приходится очень долго ждать ConcurrentMode, терпеть издевательства StrictMode и наглости memo.
Давайте начнем с вопроса. Что такое архитектура фронтенда? Это как директории называются? Правила взаимного импорта? Какой стек используется?
Почему меня вообще беспокоит архитектура и структура проекта? Начну с того, что "хорошая" структура вносит ясность. Где искать конкретный код. Куда положить новый. Как писать код командой не внося изменения одновременно в один файл.
С архитектурой сложнее, ведь она про отношение сущностей вашего проекта. Как выстроить зависимости между сущностями и модулями так, чтобы добавление нового кода не требовало внесения изменений в существующий код.
Байка: когда-то я считал, что эти психологии - лишь выдумки соплежевателей, которые придумали себе что-то там. И проблемы бывают только объективные - ногу сломал, или отравился. Кстати, тогда я был бекендером, и считал фронтендеров соплежуями. Видимо это связано с типизацией 🤔
Это отлично укладывается в характеристику ригидной психики. Люди ригидного склада ума чётко знают, что и как происходит вокруг и с ними самими. Чаще всего это военные, немцы, бекендеры. И быть ригидным неплохо - меньше переживаешь, есть план и ты его придерживаешься
Но вот в случае непредвиденных обстоятельств, когда ваша картина мира рушится - трагедия, пандемия, или оказалось, что С++ не лучший в мире язык, а за JS платят больше - ригидным людям крайне тяжело подстроиться, они продолжают держаться за свои убеждения и планы. А мир в труху.