Как зафризить страницу на JavaScript. Вопрос собеседования JavaScript

preview_player
Показать описание
👇 Разверни для полной информации



Проверяем три способа повесить (freeze) страницу с помощью JavaScript. Первый - бесконечный цикл в синхронном коде, второй - зацикленный вызов setTimeout и функции callback и третий - бесконечное создание promise внутри другого promise.

00:00 Вопрос и варианты ответа
01:50 Реализуем бесконечный цикл на странице
05:00 Callback внутри setTimeout
12:00 Промиcы циклически вызывающие друг друга
19:30 Создаем один Promise внутри другого
22:45 Создаем промисы внутри другого по setInterval

Моя рабочая станция:
Desktop: AMD Ryzen5 1600,Asus GeForce GTX 1650 Phoenix 4GB GDDR6, RAM: 16GB, Motheboard: MSI A320M PRO-M2 V2, Power: Chieftec Value APB-400B8 400W Bulk, Box: Gougar MX350 Mesh
HDD:
- Samsung 860 Evo-Series 500GB M.2
- Toshiba P300 2TB
- Silicon Power A56 256GB

Monitors:
- 23.8" Dell P2419HC
- 23.8" Dell P2418D

Mouse: Trust Verto Ergonomic Wireless
Keyboard: HP KU-1469
Microphone: Samson C01U Pro

+ MacBook Pro M1 13'' 8-Core CPU/8-Core GPU/16-core Neural Engine /16GB/256GB
+ IBM Lenovo ThinkPad E14 / Intel Core i5-1135G7 (4.2 ГГц) / RAM 16 ГБ / SSD 1 ТБ / Intel Iris Xe Graphics
Рекомендации по теме
Комментарии
Автор

На сколько я понял, вопрос на тему Event loop, setTimeout - макрозадача, после ее выполнения происходит перерендеринг страницы, а promise - это микрозадача, а микрозадачи выполняются пока не будут выполнены все, а только потом перерендеринг. Следовательно если промисы будут бесконечными это повесит браузер. Правильный ответ 1 и 3. С помощью setTimeout можно разбивать ресурсоемкие задачи на подзадачи, давая браузеру возможность реагировать на действия пользователя.

YuriyZveryanskiy
Автор

const prom = () => Promise.resolve().then(data => prom());
prom();

shellshell
Автор

По варианту №3 не понятно. Если мы в .then будем что-то делать бесконечно, тогда зафризится, так как event loop из microtask queue выполняет все и только потом переходит на следующий тик, в отличии от любой асинхронной операции, которая выполняется по одной на каждом тике event loop.

mody-pqkd
Автор

Александр здравствуйте, мне на днях дали тестовое задание на джуна, типа микро сайт с видео на react, с которым я не смог справиться, а главное посмотреть негде.. если интересно, могу скинуть вам материалы ..

petrplotnikov
Автор

Это вопрос на понимание ивентлупа и работы промисов. Если человек знает как это работает, то с лёгкостью ответит. Что касается промисов. Хоть они и используются для асинхронного кода, внутри они очень даже синхронные. Поэтому, если внутри промиса запустить бесконечный цикл(как в одном из ваших примеров), то он вполне логично "зафризит" страницу. Мне кажется, про промисы это имелось ввиду. Но это не точно :D

regedieddy
Автор

Здравствуйте Александр, Я считаю что правильный ответ только первый когда создаётся бесконечный цикл, так как в этом случае происходит блокировка потока, ведь цикл то в синхронне работает, а вот таймауты и промисы это асинхрон, потому страница не фризиться

Noname-ifz
Автор

Если это все реальные вопросы из реального собеседования то некоторые вопросы по моему мнению оторваны от реальности. Какой шанс в реальной работе воспроизвести случай №3?

alex_akuna
Автор

Да любой безграмотный цикл, особенно цикл в цикле может зафризить страницу, пусть и не навсегда, стэк засорить, вариантов куча. Очень не грамотный вопрос

somewebpractice
Автор

Думаю фриз это когда при загрузке страницы какой-то код временно не дает ничего сделать на странице

maxforest
Автор

ппц. может я крутой программист, просто я не уверен в себе. но я всё это сам понял просто логически подумав.
блин, я бы мог работать в офисе а не продукты выставлять на полочки. ((

whilefordo
Автор

Доброе утро, не по теме урока, но назрел очень для меня важный вопрос. Будет ли вообще нужен фронт енд в будущем... может с приходом VR технологий фронт енд вовсе уйдёт в небытие

xlaoru
Автор

Это нормально что я люблю хулиганить? Как только дорвался до electron - сразу же создал пару приложений и скинул своему другу на "тестирование")).
Среди них были:
1) Окно, выдающее моргающую надпись "You are idiot". При закрытии одного - создаются 2 таких же.
2) Окно, по клику на кнопку "Ускорить ПК", открывает 500 окон (а мы знаем что это по сути браузеры на базе хром) с сайтом прогноза погод
3) Окно, которое при перемещении создаёт кучу текстовых документов на рабочем столе

MrKOHKyPEHT