Как данные хранятся и удаляются за кулисами Chrome, Safari и др.

Где что-то отображается на вашей веб-странице? Процесс выделения памяти в современных браузерах является автоматическим, но это не означает, что разработчик должен воспринимать этот процесс как должное и ожидать, что он будет работать безупречно каждый раз. Понимание того, как JavaScript и браузер обрабатывают память, имеет решающее значение для решения проблем с раздутыми приложениями и создания быстрого и динамического контента.

JavaScript отображает содержимое в браузере в два этапа: этап компиляции, за которым следует этап выполнения. Во время фазы компиляции движок JS передает код, находит каждую переменную или выражение, определяющее функцию, выделяет им место в памяти и устанавливает ссылку из идентификатора на эту ячейку памяти. Это пустые ссылки, которые по сути являются заполнителями для реальных объектов.

Во время фазы выполнения движок снова проходит через код, строка за строкой, присваивая фактические значения каждой переменной и вызывая функции. Идентификаторы разрешаются относительно их местоположения в цепочке областей видимости, начиная с локальной области и продвигаясь вверх по родительским областям до достижения первого доступного идентификатора или до достижения максимально возможной области (где родительская область равна нулю).

Все это хорошо и хорошо для запуска и запуска кода в небольших приложениях, но что происходит, когда приложение начинает увеличиваться в размерах и в памяти хранится намного больше объектов? Память компьютера ограничена, и должен быть способ очистить то, что не используется, чтобы освободить место для большего количества данных и не ограничивать память других приложений, выполняемых на том же компьютере.

В языках нижнего уровня это управление памятью выполняется разработчиком вручную и представляет собой довольно сложный процесс, который приводит к приложениям с очень явным и точно настроенным использованием памяти. В языках более высокого уровня, таких как JavaScript, это управление памятью выполняется автоматически конструкцией, известной как сборщик мусора.

Браузеры использовали множество методов, чтобы выяснить, какие объекты в памяти нужны или нет, и тот, который используется современными браузерами, известен как алгоритм Mark and Sweep. Движок браузера периодически запускается с корневого объекта (глобальная область видимости), находит каждый объект, на который имеется ссылка из корня, а затем проверяет все объекты, на которые ссылаются эти объекты, и т. Д., Перемещаясь вниз по цепочке областей видимости и отмечая, какие объекты достижимы или не доступен. При использовании метода поиска в глубину все достижимые объекты помечаются как true, а все недостижимые - как false. Это известно как фаза отметки.

Затем движок проходит через кучу памяти и очищает все недостижимые объекты, освобождая их ячейки памяти для использования в будущем. Это фаза развертки.

Надеюсь, это помогло вам понять, как браузер выделяет и очищает память при запуске приложений.

Ресурсы