Вы находитесь на странице: 1из 4

КАК РАБОТАЕТ JAVASCRIPT: ОБЗОР ДВИЖКА, ВРЕМЕНИ

ВЫПОЛНЕНИЯ И СТЭКА.

Жарков Антон Павлович


Студент, Филиал ФБГОУ ВО «НИУ «МЭИ» в г. Смоленске.
Россия, г. Смоленск

Макаров Евгений Алексеевич


Студент, Филиал ФБГОУ ВО «НИУ «МЭИ» в г. Смоленске.
Россия, г. Смоленск
Теребенин Валентин Анатольевич
Студент, Филиал ФБГОУ ВО «НИУ «МЭИ» в г. Смоленске.
Россия, г. Смоленск
JavaScript – один из самых популярных и «жарких» в обсуждения, языков
программирования. В последнее время наблюдается значительный рост
популярности этого языка. Сообщество использует его на многих уровнях
разработки, не только во front-end, back-end веб-разработках[1, c. 54], но и в
гибридных приложениях, даже в микроконтроллерах и многих других аспектах.

IT-проекты становятся все более и более зависимыми от этого языка


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

Почти все могли слышать о V8 Engine как о концепте, и большинство


людей понимают, что JS является однопоточным и использует очередь
обратного вызова(callback’и).

В этой статье попробуем рассмотреть эти концепции вблизи и попытаемся


объяснить, как JS на самом деле исполняет свой код.
Популярным примером движка JavaScript является движок Google V8.
Этот движок используется в таких гигантских программных обеспечениях, как
Chrome и Node.js. Вот очень упрощенное представление о том, как это выглядит:

Рисунок 1. Базовый Engine V8

* куча(от англ. Heap) - это место, где происходит выделение памяти

* стек(от англ. Stack) – это стек о том, как ваш код выполняется

В браузере есть API, которые использовались практически любым


разработчиком JavaScript (например, «setTimeout»). Эти API, однако, не
предоставляются Engine. Так откуда они же они возвращаются к нам?
Оказывается не так все просто и в браузере исполнение JS выглядит примерно
вот так:

Рисунок 2. Engine V8 в браузере


У нас есть технологии, например, web-API, которые предоставляются
браузерами, такие как DOM, AJAX, setTimeout и многие другие [2, c. 83]. И затем,
мы имеем очередь обратных вызовов и цикл обработки событий.

JavaScript - это однопоточный язык программирования, поэтому он имеет


один стек вызовов. Это значит, что он может делать одну вещь за раз. Стек
работает так: если мы вступаем в функцию, мы помещаем её на вершину стека.
Если мы вернемся из этой функции, мы выскочим из верхней части стека. Если
же мы зададим бесконечную рекурсию (функцию, вызывающую саму себя
бесконечно), то стек «сломается», сообща нам, что был превышен максимальный
вызов стека.

Теперь представим, что допустим у нас в стеке вызовов есть такие


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

Небеспричинным будет вопрос: чем это в принципе плохо? Дело в том, что
не смотря на то, что пока стеке вызовов есть функции для выполнения, браузер
зависает, потому что любое другое исполнение кода будет ждать своего вызова
из стека. Если вас интересует, чтобы в вашем приложении были удобные
пользовательские интерфейсы, то это будет не малой проблемой.

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

Это не лучший способ взаимодействовать с пользователями вашего


приложения. Для решения этой проблемы были придуманы асинхронные вызовы
функций[3, c. 135].

В заключении, отметим, что оптимизация – один из ключей не только к


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

Список литературы:

1. The History of the Web, Volume I / Jay S. Hoffmann. – New York. : Centre
for USA research. – 2019. P. 108.
2. JavaScript. Карманный справочник / Д. С. Флэнгаган; – Москва. Вильямс,
Отдельное издание 2014, 320с
3. JavaScript. Сильные стороны/ К. Б. Дуглас; – Москва. Вильямс,
Отдельное издание 2016, 176с.