Браузер отвечает за сбор событий по мере их появления на странице. Когда для данного действия добавлен прослушиватель событий, обратный вызов слушателя добавляется в цикл событий. Цикл обработки событий - это бесконечный цикл, который постоянно проверяет, нужно ли что-то делать (оптимизировано для процессора). В цикле обработки событий есть две основные задачи:
- рендеринг страницы, если есть изменения в DOM или CSSOM
- выполнение обратных вызовов, когда происходит какое-то конкретное действие
Важно знать, что javascript является однопоточным, то есть, если есть длительный обратный вызов, браузер не сможет перерисовать страницу, поэтому страница просто зависает.
Еще один способ понять, что происходит под капотом, - открыть инструменты Chrome Dev и перейти на панель производительности. Вы можете найти там, что именно происходит, когда вы взаимодействуете со страницей:
![enter image description here](https://i.stack.imgur.com/RSp6V.png)
Есть несколько способов добавить прослушиватель событий:
- в html с использованием
on[eventname]=action
, т.е. <div onmousemove="myMoveFunction()">
- в javascript путем присвоения функции свойству [eventname], т.е.
windows.onload = () => alert("hello");
- в javascript с использованием метода
addEventListener()
, т.е. element.addEventListener("click", () => alert("hello"));
Если вы хотите узнать больше о цикле событий, вот хорошие ресурсы:
Существует также довольно хороший и бесплатный курс, который многое объясняет о том, как работает браузер, и, что самое важное, показывает, как повысить производительность сайта:
Оптимизация рендеринга в браузере