Питання на співбесіді з браузера й продуктивності з відповідями
Як браузер завантажує й рендерить сторінку, Core Web Vitals (LCP, INP, CLS), завантаження ресурсів, HTTP-кешування, CORS, cookies, XSS, CSP та інша безпека в браузері.
225 запитань для співбесіди з теми Браузер і продуктивність з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- Core Web Vitals
- Rendering
- HTTP Cache
- CORS
- XSS
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Браузер і продуктивність · Junior
- Ви вводите URL і натискаєте Enter. Який порядок кроків найближчий до того, що браузер робить спочатку?
Правильна відповідь: DNS-запит, TCP- (і TLS-) з'єднання, HTTP-запит, потім розбір HTML-відповіді
Браузер має перетворити ім'я хоста на IP, відкрити з'єднання (плюс TLS для HTTPS) і надіслати запит, перш ніж отримає HTML для розбору.
- Що браузер будує з HTML, який розбирає?
Правильна відповідь: DOM - дерево вузлів документа
HTML розбивається на токени, з яких складаються вузли DOM. CSS окремо розбирається в CSSOM; пізніше їх поєднують.
- Що таке render tree?
Правильна відповідь: Поєднання DOM і CSSOM, де є лише видимі вузли з обчисленими стилями
Елементи з
display: noneі невізуальні вузли на кшталт<head>туди не потрапляють. Render tree - вхідні дані для layout. - Який порядок етапів рендерингу правильний після побудови render tree?
Правильна відповідь: Layout, paint, composite
Layout обчислює геометрію, paint заповнює пікселі шарів, а композитинг виводить шари на екран у правильному порядку.
Браузер і продуктивність · Middle
- Які CSS-властивості зазвичай можна анімувати без запуску layout чи paint?
Правильна відповідь:
transformіopacityЇх може обробити компоновник (compositor) на вже відмальованому шарі, тож анімації лишаються плавними, навіть коли головний потік зайнятий.
- Чим ризиковано додавати
will-change: transformбагатьом елементам?Правильна відповідь: Кожен може отримати власний шар компоновника, що коштує пам'яті GPU й іноді все сповільнює
will-change- підказка для елементів, які от-от анімуватимуться, а не загальне прискорення. Зловживання призводить до «вибуху шарів». - Чому
requestAnimationFrameкращий заsetInterval(fn, 16)для візуальних оновлень?Правильна відповідь: Він запускається якраз перед рендерингом наступного кадру й зупиняється у фонових вкладках
Таймери «пливуть» і не синхронізовані з кадрами, тож оновлення можуть губитися або виконуватися двічі. rAF також підлаштовується під екрани 120 Гц.
- Що робить
content-visibility: auto?Правильна відповідь: Пропускає роботу з рендерингу (layout і paint) для контенту поза екраном, доки той не наблизиться до видимої області
На довгих сторінках це може значно скоротити початковий рендеринг. Поєднуйте з
contain-intrinsic-size, щоб смуга прокрутки не стрибала.
Браузер і продуктивність · Senior
- Що гарантує Site Isolation у Chromium?
Правильна відповідь: Сторінки різних сайтів рендеряться в різних процесах ОС
Після Spectre межі процесів стали головним захистом від того, щоб один сайт читав пам'ять іншого, зокрема cross-site iframe.
- Чому браузери вимкнули
SharedArrayBufferза замовчуванням, а потім знову ввімкнули лише для cross-origin isolated сторінок?Правильна відповідь: Він дає таймери високої точності, корисні для атак Spectre; ізоляція гарантує, що в процесі немає cross-origin даних
Із COOP і COEP сторінка не може підтягнути cross-origin ресурси, які на це не погодилися, тож Spectre-гаджету нема що секретного читати.
- Після ввімкнення
COEP: require-corpперестали вантажитися сторонні зображення. Які є варіанти?Правильна відповідь: Стороння сторона має надсилати
Cross-Origin-Resource-Policy: cross-originабо віддавати через CORS; або використатиCOEP: credentiallesscredentiallessвантажить no-cors cross-origin ресурси без cookies, тож вони не можуть містити секретів конкретного користувача. - Від чого, крім увімкнення ізоляції, захищає
Cross-Origin-Opener-Policy: same-origin?Правильна відповідь: Cross-origin вікна, які ваша сторінка відкрила чи які відкрили її, втрачають посилання
window.opener, що блокує багато XS-Leaks і tabnabbingСпливні вікна в окремій групі контекстів перегляду не можуть рахувати ваші фрейми, переводити вас на іншу сторінку чи вимірювати час через дескриптор вікна.
Збірні тести з цією темою
Запитання з кількох тем одразу - як на співбесіді на конкретну вакансію.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід на JavaScript (debounce, deepClone, Promise.all, LRU-кеш) і на React: компоненти й хуки на кшталт списку справ, вкладок, useDebounce та useInterval.
Відкрити задачі →