Существует множество веб-сайтов, которые расскажут вам о технических аспектах и ​​работе Javascript. Я считаю, что Javascript — один из лучших языков программирования, который используется как во внешнем, так и во внутреннем интерфейсе. Но как это работает на самом деле?

В программировании вы наверняка слышали такие фразы, как «однопоточный» или «неблокирующий». Ну, Javascript, безусловно, работает как однопоточный язык, который не блокирует. Но что это вообще значит?

Для этого давайте разберемся, что такое программа. Теперь вы, вероятно, скажете: «Эй! Я знаю, что такое программа. Расскажите мне, что такое Javascript». Что ж. вы видите, что все связано. Языки программирования реализуются с помощью двух простых вещей. Память — для хранения переменных или выделения места для запуска кода, а процесс — чтение и запись (анализ и выполнение кода).

Javascript работает именно так. Он использует Memory Heap для выделения памяти. Он использует стек вызовов для запуска функций или методов в программе. Думайте об этом как о подносе. Поднос с тарелками держится сверху каждой тарелки. Каждая инструкция/команда помещается поверх этого лотка, и как только она выполняется, она передается из нее.

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

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

Когда я сказал, что Javascript — это однопоточный язык, я имел в виду, что он имеет только один стек вызовов. Это означает, что он может выполнять только один запрос за раз. И это хорошо для программы, потому что уменьшает сложность. Большинство других языков являются многопоточными, что означает наличие нескольких стеков вызовов.

Синхронно, асинхронно сделано. Что, черт возьми, не блокирует? Создание setTimeout() в Javascript позволяет нам преобразовать синхронное действие в асинхронное. Вот что требуется, чтобы программа была неблокирующей, т. е. не блокировала выполнение оставшейся части программы только потому, что она медленнее, дольше.

Но это была теория всего этого. Как на самом деле работает JS? «Что это за хрень, которую вы объяснили выше?», — спросите вы. Ну, так работает Javascript. Но на заднем плане что-то называется стеком вызовов, веб-API, очередями обратного вызова и циклом событий.

Для этого настраивайтесь на мою следующую историю.

Удачного кодирования!