Основы внутреннего устройства JavaScript

С ростом популярности JavaScript команды разработчиков начали использовать его поддержку на многих уровнях своего стека — во фронтенде, бэкенде, гибридных приложениях, встраиваемых устройствах и многом другом. В этой статье мы хотим более глубоко рассмотреть JavaScript и то, как он работает.
Введение
Почти все уже слышали о концепции движка V8 и большинство людей знает, что язык JavaScript однопотоковый или что он использует очередь обратных вызовов.
В этом посте мы подробно разберём эти концепции и объясним, как же работает JavaScript. Благодаря знанию этих подробностей вы сможете писать более оптимальные приложения, надлежащим образом использующие API. Если вы работаете с JavaScript относительно недавно, этот пост поможет вам понять, почему JavaScript настолько «странный» по сравнению с другими языками. А если вы опытный разработчик на JavaScript, то он позволит вам по-новому взглянуть на внутреннее устройство JavaScript Runtime, с которым вы работаете каждый день.
В этой статье мы обсудим внутреннюю работу JavaScript в среде выполнения и в браузере. Это будет краткий обзор всех базовых компонентов, задействованных в исполнении кода на JavaScript. Мы рассмотрим следующие компоненты:
- JavaScript Engine.
- JavaScript Runtime Environment.
- Стек вызовов.
- Параллельность и цикл событий.
JavaScript Engine
Как вы, возможно, слышали ранее, JavaScript — это интерпретируемый язык программирования. Это означает, что перед исполнением исходный код не компилируется в двоичный код.
Как же компьютер может понять, что ему делать с простым тестовым скриптом? В этом и заключается работа движка JavaScript. Движок — это просто компьютерная программа, исполняющая код JavaScript. Движки JavaScript встроены во все современные браузеры. Когда файл скрипта загружается в браузер, движок исполняет каждую строку файла сверху вниз (чтобы упростить объяснение, мы не будем рассматривать поднятие (hoisting) в JS). Движок строка за строкой парсит код, преобразует его в машинный код, а затем исполняет.

У каждого браузера есть собственный движок JavaScript, но самым известным является Google V8. Движок V8 лежит в основе Google Chrome, а также Node.js.

Движки браузеров
Движок состоит из двух основных компонентов:
- Куча памяти — здесь происходит распределение памяти.
- Стек вызовов — здесь находятся стековые кадры в процессе исполнения кода.

Любой движок JavaScript всегда содержит стек вызовов и кучу. Именно в стеке вызовов исполняется наш код. А куча — это пул неструктурированной памяти, хранящий все объекты, необходимые приложению.
Runtime
Пока мы говорили только о движке JavaScript, но он не работает в изоляции. Он выполняется в среде под названием JavaScript Runtime Environment наряду со множеством других компонентов. JRE отвечает за обеспечение асинхронности JavaScript. Именно благодаря ей JavaScript способен добавлять события и выполнять HTTP-запросы асинхронно. JRE похожа на контейнер, состоящий из следующих компонентов:
- JS Engine;
- Web API;
- Очередь обратных вызовов или очередь сообщений;
- Таблица событий;
- Цикл событий.

Стек вызовов
JavaScript — это однопоточный язык программирования, то есть он имеет один стек вызовов. Следовательно, он может выполнять по одной задаче за раз.
Стек вызовов — это структура данных, по сути, записывающая, в каком месте программы мы находимся. Если мы заходим в функцию, то помещаем её в вершину стека. Если мы возвращаемся из функции, то извлекаем вершину стека. Вот и всё, что может делать стек. Давайте рассмотрим пример. Взгляните на следующий код:
Когда движок начинает исполнять код, стек вызовов будет пуст. Далее выполняются следующие шаги:

Каждая запись в стеке вызовов называется стековым кадром.
Выполнение кода в одном потоке может быть довольно простым процессом, потому что не приходится иметь дело со сложными ситуациями, возникающими в многопотоковых средах, например, с взаимными блокировками. Однако выполнение в одном потоке ещё и сильно ограничивает.
Параллельность и цикл событий
Что произойдёт, когда в стеке вызовов есть вызовы функций, для обработки которых нужно огромное количество времени? Например, если нам нужно выполнить в браузере при помощи JavaScript какое-то сложное преобразование изображения.
Вы можете спросить: а почему это вообще проблема? Проблема в том, что пока в стеке вызовов есть функции, которые нужно исполнять, браузер не может делать ничего другого, он блокируется. Это значит, что браузер не может рендерить, не может выполнять любой другой код, он просто простаивает. И это создаёт проблемы, если UI в приложении должен быть отзывчивым.
Но это не единственная проблема. Как только браузер начинает обрабатывать такое количество задач в стеке вызовов, он может оказаться неотзывчивым на достаточно долгое время. И большинство браузеров предпринимают действия, выдавая ошибку, спрашивая пользователя, хочет ли он завершить выполнение веб-страницы.
Часть 2: внутреннее устройство движка

Компиляция и интерпретация
Для начала нам нужно рассказать о разнице между компиляцией и интерпретацией. Мы знаем, что процессор компьютера понимает только нули и единицы, поэтому в конечном итоге каждая компьютерная программа должна быть преобразована в машинный код, и это можно сделать при помощи компиляции или интерпретации.
При компиляции весь исходный код за раз преобразуется в машинный код. А затем этот машинный код записывается в портируемый файл, который может исполняться на любом совместимом компьютере. Здесь есть два этапа. Сначала машинный код собирается, а затем исполняется в процессоре. И исполнение может происходить намного позже компиляции.

При интерпретации используется интерпретатор, проходящий по исходному коду и исполняющий его строка за строкой. То есть двух описанных ранее этапов здесь нет. Вместо них код считывается и исполняется одновременно. Разумеется, исходный код всё равно нужно преобразовать в машинный код, но это просто происходит прямо перед исполнением, и не раньше.
JavaScript был полностью интерпретируемым языком, но проблема интерпретируемых языков заключается в том, что они гораздо медленнее скомпилированных языков. Раньше для JavaScript это было нормально, но для современного JavaScript и полнофункциональных приложений низкая производительность более неприемлема.
Многие люди по-прежнему считают, что JavaScript — это интерпретируемый язык, но это уже не так. Вместо простой интерпретации современные движки JavaScript используют комбинацию компиляции и интерпретации, называемую компиляцией Just-in-time(JIT).

Компиляция Just-in-time
При таком подходе весь код компилируется в машинный код и сразу же исполняется. То есть присутствуют два этапа обычной предварительной компиляции, но портируемого исполняемого файла нет. И исполнение происходит сразу же после компиляции. Это идеально подходит для JavaScript, потому что это намного быстрее, чем просто исполнение строка за строкой.
Современная компиляция Just-in-time языка JavaScript
В дело вступает элемент кода JavaScript, называемый движком. Его первый этап — это парсинг кода, то есть, по сути, его чтение. В процессе парсинга код преобразуется в структуру данных под названием Abstract Syntax Tree (AST). Каждая строка кода разделяется на значимые для языка элементы, например, ключевые слова const или function , а затем все эти элементы структурированным образом сохраняются в дерево. На этом этапе также выполняются проверки синтаксических ошибок. Получившееся дерево позже будет использовано для генерации машинного кода.

Допустим, у нас есть очень простая программа, показанная на рисунке слева. Она лишь объявляет переменную, а справа показано, как выглядит дерево AST для этой одной строки кода. Итак, у нас есть объявление переменной, которая должна быть константой с именем «a» и значением «23». Как вы видите, кроме этого в дереве есть ещё много другого. Представьте, насколько объёмнее оно будет для реального большого приложения.
Следующий этап — это компиляция, при которой берётся сгенерированное AST и компилируется в машинный код. Этот машинный код исполняется сразу, так как в современном JavaScript используется компиляция Just-in-time. При этом стоит помнить, что исполнение происходит в стеке вызовов движка JavaScript. Подробнее об этом мы поговорим в следующей статье.

Отлично, наш код работает, так что на этом можно закончить, правда? Ну, не совсем, потому что в движках современного JavaScript есть продуманные стратегии оптимизации. Сначала они создают очень неоптимизированную версию машинного кода, чтобы он мог начать исполняться как можно быстрее. Затем в фоновом режиме этот код оптимизируется и рекомпилируется, пока программа уже исполняется. Это можно делать почти всегда и после каждой оптимизации. Неоптимизированный код просто заменяется новым, более оптимизированным кодом, даже без приостановки исполнения. И именно благодаря этому процессу современные движки наподобие V8 так быстры.
Все эти операции парсинга, компиляции и оптимизации выполняются в специальных потоках внутри движка, доступ к которым мы не можем получить из кода. То есть они отделены от основного потока, который управляет стеком вызовов, исполняющим наш код. В разных движках это реализовано немного по-разному, но в целом, именно так выглядит современная компиляция Just-in-time для JavaScript.
Как выбрать правильный стек технологий для веб-приложения
Перед запуском каждого проекта в сфере IT проходит множество процессов планирования и принятия решений. Эта фаза планирования имеет решающее значение и может оказать значительное влияние на будущее проекта.
Выбор правильного стека технологий может повлиять на время разработки, стоимость, качество приложения, а также на масштабируемость, поэтому так важно принять правильное решение, даже если вам нужно потратить больше времени, анализируя все плюсы и минусы доступных решений.
В этой статье мы хотим объяснить вам, что на самом деле представляет собой стек технологий веб-приложения, и, кроме того, рассмотрим доступные технологии, их плюсы и минусы и попытаемся выбрать, какая технология подходит для конкретного случая. Кроме того, мы выбрали несколько важных факторов, которые следует учитывать перед принятием решения о стеке технологий.
Когда технологии выбраны, каждому внешнему проекту по-прежнему необходимо принять еще несколько решений, таких как структура вашего внешнего приложения, которые помогут вам поддерживать и масштабировать его.
Начнем с объяснения того, какой стек технологий находится во внешнем интерфейсе.

Что такое стек технологий?
Стек технологий — это комбинация языков программирования, фреймворков и программного обеспечения, используемых для создания приложения.
Каждое веб-приложение состоит из двух частей: клиентской и серверной. Клиентская сторона — это все, что пользователи могут видеть на экране. Важнейшими элементами технологического стека на стороне клиента являются:
- HTML, который отвечает за отображение содержимого в браузере,
- CSS стилизует контент,
- Javascript отвечает за интерактивную часть веб-приложения.
Эти технологии можно использовать с полезными фреймворками, такими как Bootstrap или React.js.
Серверная часть приложения не видна конечному пользователю, она обеспечивает данные для клиентской части. Что касается серверной части, мы должны принять во внимание выбор:
- язык бэкэнд-программирования, такой как Java или C #,
- такие фреймворки, как Spring или .NET,
- база данных, такая как PostgreSQL или MongoDB,
- сервер, такой как Apache или Nginx, или выберите бессерверную архитектуру.
Когда вы планируете следующий технологический стек приложения, вы должны учитывать серверную и клиентскую стороны. В этой статье мы углубимся в стек технологий внешнего интерфейса и рассмотрим различные возможности разработки внешнего интерфейса.
Обзор фреймворков Frontend
Современные фреймворки внешнего интерфейса могут управлять всеми тремя элементами пользовательского интерфейса; у них есть HTML-шаблоны, стили и интерактивные функции.
Прямо сейчас есть три наиболее распространенных фреймворка на выбор; это ReactJS, Angular и VueJS.
Чтобы иметь возможность выбрать любую из них, хорошо знать больше о каждой из технологий, поэтому мы пройдемся по каждой и опишем их с точки зрения стека внешних технологий и архитектуры внешнего интерфейса.

ReactJS
ReactJS — это не фреймворк; это UI-библиотека, созданная Facebook и поддерживаемая огромным сообществом. ReactJS подходит для менее сложных приложений и больше ориентирован на расширенный пользовательский интерфейс и повторно используемые компоненты на очень сложной логике внешнего интерфейса.
ReactJS имеет богатую экосистему, которая состоит из самого ReactJS и библиотеки React-DOM для управления объектами DOM. Далее React-Router, который отвечает за маршрутизацию. Кроме того, он поставляется с JSX, который является расширением синтаксиса для Javascript для создания шаблонов в ReactJS. Чтобы сделать разработку проще и быстрее, очень полезны инструменты разработчика React.
Кроме того, если вы планируете мобильное приложение для своего проекта, ReactJS имеет структуру для мобильной разработки под названием React Native, которая очень похожа на сам ReactJS.
С точки зрения компании, наиболее существенными преимуществами ReactJS являются относительно низкая стоимость разработки и короткие сроки разработки. Кроме того, найти разработчиков со знаниями ReactJS несложно, а технология присутствует на рынке уже давно, поддерживается большим создателем и огромным сообществом. Это означает, что ReactJS не исчезнет и не перестанет поддерживаться в ближайшее время.
Давайте быстро подведем итоги, когда выбор ReactJS для вашего следующего проекта будет хорошей идеей и почему.
- Если приложение, которое вы планируете, имеет расширенный пользовательский интерфейс со множеством повторно используемых компонентов и множеством манипуляций с DOM, хорошо использовать ReactJS.
- Если у вас сжатые сроки, ReactJS также будет хорошей идеей.
- Если у вас средний бюджет и хотя бы один senior-разработчик с опытом планирования и создания приложений ReactJS.
Это не лучший выбор, если приложение имеет расширенную логику или не может нанять опытного разработчика, который смог бы спланировать рабочий процесс приложения.
ReactJS легко изучить, но он не требует от разработчиков писать качественный код, поэтому вам всегда нужен опытный человек в команде, который позаботится об этом.
Angular
Большой конкурент ReactJS — Angular. В отличие от первой описанной технологии, Angular — это фреймворк, и он хорош для сложных проектов с более продвинутой логикой.
Angular имеет встроенную надежную экосистему разработки, такую как маршрутизация или управление состоянием. У него также очень чистая архитектура, и все разбито на три разных файла (логика, шаблон и стили).
Еще одним преимуществом сайта Angular является то, что его легко интегрировать с бэкэндом MVC.
Angular также заставляет разработчиков планировать и разрабатывать приложения до того, как они начнут работать над ним, что продлевает разработку и повышает качество проекта.
С точки зрения компании и руководства Angular обеспечивает очень высокое качество разрабатываемого проекта, но увеличивает стоимость приложения, а время разработки немного больше. Angular был создан Google и поддерживается одной из крупнейших IT-компаний, поэтому не нужно беспокоиться о том, что наш код быстро устареет. Недостатком выбора Angular в качестве основной технологии проекта является то, что нелегко найти разработчиков, знающих эту технологию, а обучение — непростое.
Подведем итог и по Angular.
- Если проект большой и сложный, со сложной логикой, но довольно простым пользовательским интерфейсом, Angular будет хорошим решением.
- Если вы заботитесь о качестве кода и хотите, чтобы ваш проект имел надежную масштабируемость, Angular — ваш выбор.
- Если у вас в команде есть Angular-разработчики, выбрать этот фреймворк — отличная идея.
Если приложение, которое вы планируете, больше ориентировано на пользовательский интерфейс и имеет много манипуляций с DOM, тогда было бы гораздо лучше выбрать что-то другое.
VueJS
Последней из самых популярных технологий, используемых в настоящее время во внешнем интерфейсе, является VueJS. Это самый младший из трех. VueJS, как и ReactJS, представляет собой библиотеку пользовательского интерфейса, представляющую собой смесь концепций ReactJS и Angular.
Vuex, который является менеджером состояний для VueJS, намного проще поддерживать, чем Redux.
VueJS, как и ReactJS, требует внешних свобод для создания полноценной экосистемы, но готовых решений гораздо меньше, что делает это немного рискованным.
Кроме того, у VueJS нет большой компании, и он не поддерживается огромным сообществом, поэтому неизвестно, как долго он будет поддерживаться.
С точки зрения руководства и компании VueJS — это малобюджетное решение, и разработчики могут легко изучить структуру, поэтому вам не нужен высококвалифицированный разработчик с многолетним опытом работы в этой технологии. Если вы хотите сократить время разработки, а проект небольшой, VueJS будет отличным решением.
Подведем итоги решения VueJS.
- Если приложение, которое вы разрабатываете, представляет собой небольшой побочный проект или небольшой MVP, то VueJS — отличное решение.
- Если у вас небольшой бюджет и только начинающие разработчики, также неплохо выбрать VueJS.
- Если у проекта нет большой логики и больших требований к пользовательскому интерфейсу, а дедлайн близок, VueJS — хорошее решение.
Javascript или Typescript?
Есть два решения при выборе основного языка программирования для внешнего интерфейса; это Javascript и Typescript, которые являются синтаксическим расширением Javascript.
В некоторых случаях требуется Typescript; например, когда вы решите создать свой проект с помощью Angular. Но VueJS и ReactJS не требуют использования Typescript, хотя могут иметь много преимуществ.
Во-первых, использование Typescript сокращает время разработки, поскольку сокращает количество ошибок, влияет на обслуживание приложения и упрощает его. Кроме того, эту технологию поддерживают все современные фреймворки. Кроме того, с помощью Typescript может быть проще разработать интерфейс, если бэкэнд еще не готов, но мы знаем, какой тип данных мы получим.
Единственным недостатком Typescript является то, что его не очень просто настроить с помощью ReactJS или VueJS.
Хорошая новость заключается в том, что Typescript создан Microsoft, поэтому очень мала вероятность, что он будет забыт, и вам придется переделывать приложение.
Подводя итог, можно сказать, что выбор Typescript может упростить и ускорить процесс разработки и помочь избежать частой отладки, что может быть очень важно, особенно до дедлайна.
CSS, Less или Sass?
Хотя современные фреймворки внешнего интерфейса могут предоставить вам все элементы, важные в стеке технологий вашего внешнего проекта, вы решаете, как вы хотели бы писать стили в приложении.
Написание стилей на чистом CSS не очень удобно в больших проектах. Наличие огромных файлов CSS может превратить разработку любого проекта в кошмар, затягивая процесс.
Чтобы упростить задачу, неплохо решить использовать какой-либо препроцессор, например Less или Sass. Их очень легко реализовать в проекте, использующем Webpack, и код становится намного чище.
И Less, и Sass позволяют нам использовать миксины, наследование или переменные, поэтому, если необходимо срочно изменить брендинг и цвета во всем приложении, это больше не проблема.
Единственная разница между Sass и Less заключается в том, что Sass написан на Ruby, поэтому он должен быть установлен на вашем компьютере, а Less написан на Javascript, поэтому для его запуска требуется установленный Node.js.
С точки зрения компании, самым большим преимуществом использования препроцессоров является экономия времени, и это позволяет нам избежать трудностей с поддержкой приложения, особенно когда оно будет расти.
Что следует учитывать при выборе технологического стека для проекта?
На этом этапе мы хотели бы остановиться на некоторых факторах, которые должны быть важны для каждого, кто принимает решение о техническом стеке интерфейсных приложений.
Размер приложения
Первый фактор, который следует учитывать при выборе технического стека, вероятно, довольно очевиден, потому что самым важным является размер приложения, потому что с размером проекта растет и сложность.
Время разработки
Еще один важный фактор при выборе технологического стека для проекта — это время вывода приложения на рынок.
Если времени мало, вам нужно выбрать технологию, которая не требует длительного планирования, разработка не сложна, и вы можете обратиться к разработчикам, которые знают эту технологию.
В случае длительного вывода на рынок вы можете рассмотреть несколько факторов, чтобы сделать правильный выбор.
Безопасность
Учитывая, что вы тратите много денег на приложение, вам нужно, чтобы оно было безопасным. Тем более, что количество кибератак продолжает расти, нужно серьезно отнестись к этому, чтобы позаботиться о безопасности своих данных.
Большинство популярных фреймворков внешнего интерфейса содержат некоторые рекомендации по безопасности. Вам нужно позаботиться о том, чтобы следовать всем этим рекомендациям в процессе разработки.
Стоимость
Для многих компаний это один из самых важных факторов. Большинство фреймворков и инструментов являются бесплатными и имеют открытый исходный код, но все же вам нужно нанять разработчиков, поэтому вам нужно рассчитать, сколько разработчиков вам понадобится, чтобы завершить приложение за определенный период времени с помощью выбранной технологии.
Помимо стоимости разработки, вам необходимо принять во внимание расходы на обслуживание и серверные расходы. Если вы хотите сократить расходы на обслуживание, возможно, стоит подумать о бессерверной архитектуре для вашего приложения.
Масштабируемость и поддержка
Также важно думать о будущем приложения. Если вы хотите, чтобы оно увеличивалось, оно должно быть легко масштабируемым и поддерживаемым. Добиться этого легко, просто нужно выбрать хорошую структуру проекта и позаботиться об использовании надежных технологий.
В зависимости от типа проекта вам может быть необходимо обратить внимание на еще несколько факторов, например производительность. Не забудьте переосмыслить каждый аспект приложения, чтобы вы могли спланировать его до его запуска, а внедрение любых изменений архитектуры становится действительно дорогостоящим.
Вывод
Выбор правильного технического стека важен для успеха приложения, которое вы планируете создать, и для плавного завершения процесса разработки до дедлайна.
Чтобы сделать правильный выбор среди всех доступных на рынке интерфейсных технологий, вы должны внимательно изучить наиболее важные функции приложения и посмотреть на факторы, которые могут так или иначе повлиять на решение.
Разным приложениям нужен другой подход, поэтому стоит помнить, что если предыдущий проект был выполнен с помощью Angular и был успешным, текущему может потребоваться другая технология.
Также стоит взглянуть на разницу между Javascript и Typescript и подумать, какой из них будет лучшим выбором для приложения.
Choosing a Technology Stack for Web Application Development

Imagine you have an idea for a startup or need a corporate web application. You meticulously calculated your functionality and already visualized your new app. You probably hired a contractor, identified the technical requirements, developed prototypes, and approved the design.
Now, as a business owner, you are distracted by the development of a marketing strategy, pricing models, and other essential tasks. And maybe you have forgotten that the UI is just a cloak that hides a specific stack of technologies. Specifically, your technology stack provides your web application with reliability, security, performance, and fault tolerance.
You don’t have to choose your tech stack yourself, but you must have a common understanding of what your web app is based upon.
It is okay for a tech stack to be picked by the development team, so don’t worry if you don’t have enough technical knowledge. However, you should make sure that your dev team has a complete understanding of your web app and business specifics. Don’t forget to learn about each technology in your stack, and if you have some doubts, discuss them with your developers.
Before Choosing a Tech Stack for Your Web Application
First, you should understand how your application works so that you are able to communicate with your developers properly. Here, it is key to know that all web applications consist of a frontend and a backend. Next, we will simplify the frontend and backend components.

The frontend, or client side, involves everything users see on their screens. The frontend receives data from the server, processes it and displays it to the user. Further, this part of the system provides the interface to the rest of the application (the back end) and processes user actions.
The backend is the server side of your app. This part of the application stores all necessary information, then structures and processes this data at the request of the client side of the system .
The server side isn’t visible to users, but it powers the client side, just as a power station generates electricity for your house.
In this article, we will share the most popular tech stack for 2023. Please note that we will only be referencing a small portion of all tech stack solutions. If your development teams suggest a tech stack not listed here, please consider their recommendation because that tech stack might be the best solution for you.
Technology Stack for Frontend Development
Here are the major frontend technology stack components:
- HTML (Hypertext Markup Language) defines the structure of the information presented in the browser.
- CSS (Cascading Style Sheets) is a style-sheet language that describes the look and formatting of a document written in HTML.
- JavaScript is a scripting language that runs in the browser and makes the web page interactive.
Frontend Frameworks
Frontend frameworks are packages with prewritten, standardized code structured in files and folders. They provide developers with a foundation of pretested, functional code to build on, along with the ability to change the final design. If you look at JavaScript frameworks, there is a field of fierce competition, the leaders being Angular, React and Vue.
When choosing a JavaScript framework, your team’s experience will matter most, but you should also take into account the framework’s popularity. Often, more popular technologies have communities that offer ready-made solutions, solve and document problems, and have more experienced users. All of the frameworks in the graph below are widespread and have large communities.

Do you need server-side rendering (SSR) for your web app? If your application is a closed system that should not be indexed by a search engine, a single-page app (SPA) developed on any of the above frameworks is an excellent option.
However, if the application is indexed and search traffic is essential, you will require SSR. An increasing number of search engines identify SPAs, but many SEO experts believe that search bots and SPAs do not work together predictably and recommend using SSR. If you need to choose a technology to enable SSR, then our recommendation is Next.js.
Technology Stack for Backend Development
The backend part of the technology stack includes more components, and there are many more options to choose from here. The backend works behind the scenes and is invisible to users, but it forms the engine that drives the application and implements its business logic.
All backend tech stacks include the following main parts:
- Operating system in which the development is done
- Web server that processes requests from the browser and returns the corresponding content
- Database to store the app data
- Programming language used to create the app code
- Web development framework for faster and easier development
Programming Languages
Let’s take the PopularitY of Programming Language (PYPL) Index rating , which is created by analyzing how often language tutorials are searched on Google. The more a programming language tutorial is examined, the more popular the language is assumed to be. Next, let’s look at some of the top-rated programming languages according to the PYPL Index:
Python
Python is the top-ranked programming language, and its popularity has recently been snowballing. It is applicable almost everywhere — from web to desktop programs. Development within Python is high speed and high quality.
Additionally, Python has various ready-made libraries. Python is considered the best programming language for machine learning and big data, which will likely allow it to maintain its popularity.
Popular Python frameworks: Django (67K GitHub Stars) and Flask (61K GitHub Stars).
PHP is a scripting language that is very popular in backend development. Many content management systems (CMSs) are written in PHP.
Popular PHP frameworks: Symfony (27k GitHub Stars) and Laravel (71k GitHub Stars).
JavaScript (Node.js)
Surprised? Yes, JavaScript is also used on the backend. Node.js is a JavaScript runtime environment built on Chrome’s V8 JavaScript engine.
Since its initial release in 2009, Node.js has gained recognition among programmers and continues to gain popularity.
Popular JavaScript backend frameworks: express.js (59K GitHub Stars), Koa (33K GitHub Stars), and Hapi (14K GitHub Stars).
Go is a compiled multithreaded language developed by Google. According to Rob Pike , «Go was designed to solve real-world problems that arise when developing software at Google.”
Once built, programs written in Go are binary files that do not demand any language-dependent runtime environment. While part of the community says Go has everything you need, the other part still uses frameworks for backend development.
Popular Go frameworks: Gin (64k GitHub Stars) and BeeGo (29k GitHub Stars).
Java, like Python, has a wide scope of applications . You can use Java to develop Android apps, desktop programs, and backend servers.
Popular Java frameworks: Spring (50k GitHub Stars) and others.
Other Languages
There are many backend programming language options, such as C# (.NET Framework), Ruby (Ruby on Rails), and others. If your development team suggests a solution not mentioned on this list, don’t panic; just take the time to learn about the proposed programming language.
Databases
Now that we discussed programming languages, we need to figure out where to store all the necessary data. Below are the most popular databases among professional developers, according to the Stack Overflow Developer Survey.

When choosing your databases, you first need to know about their categories. All accessible databases can be divided into several types:
Relational Databases
Relational databases are exceptional for developing financial applications and other systems where data security is critical. These databases meet the requirements of ACID (atomicity, consistency, isolation, durability), which guarantee the integrity of the executed transactions and the safety of all changes made by a successful transaction.
All data is structured and corresponds to a specific type. If the structure of your data changes often, look in the direction of NoSQL databases.
Popular relational databases: MySQL, PostgreSQL, MS-SQL, and MariaDB.
Document-oriented Databases
Document-oriented database management systems (DBMSs) focus on flexibility, speed, and scalability. By using a document-oriented database, you can store and process unstructured data without predefined types.
Additionally, they do not use SQL standards, so they are often called NoSQL databases. Each database implements its own query language for working with data.
MongoDB, an example of a document-oriented database, added multi-document ACID transactions in its 4.0 version. Now, MongoDB not only offers flexibility and speed, but it also guarantees data integrity.
Popular document-oriented databases: MongoDB and DynamoDB.
Caching System
A caching system reduces server lag and relieves the database of heavy loads during peaks in traffic by serving previously used and accessed data. Without a caching system, web apps are often sluggish and offer poor site performance.
The most popular caching systems: Redis and Memcached .
Redis, a popular in-memory data structure store, can provide sub-millisecond response times, ensuring the fast performance of high-load applications. Redis is often applied in game development, IoT, and financial apps.
Web Server
The web server’s task is to accept HTTP requests from clients (i.e., web browser, mobile app), forward them to a specific program and return the HTTP response.
Most used web servers: Nginx and Apache.
Other Technologies
In addition to all of the above, other technologies may be involved in your project. For example:
- RabbitMQ is a broker for exchanging messages between your services.
- Docker is used for containerizing and automating the deployment of your app.
- Elasticsearch is a document-based data storage and retrieval tool tailored to storing and rapidly retrieving information. Elasticsearch is used to facilitate the user experience with quicker search results.
With regard to the operating system, your server will most likely have an OS from the Unix-like family (for example, Ubuntu), but Windows is also possible if your project has specific requirements related to Microsoft products.
What to Consider When Choosing a Tech Stack
Above, we’ve listed various technologies. At this point, you may be thinking, «Okay, I understand that there are a lot of technologies, but which one should I choose for my project?»

Your answer will vary by project, as all projects are unique and have specific requirements. You can use several different programming languages and databases within the same project. For example, it would be reasonable if your primary database is PostgreSQL, you store statistics in MongoDB, and you apply Redis for caches.
It is simply impossible to answer the above question without familiarizing yourself with the requirement specification and having an idea about the project. However, it’s worth paying attention to some general criteria mentioned below.
Project Size and Complexity
For small web applications without complex logic, like landing pages or MVPs , ready-made CMS platforms may be suitable. By choosing an off-the-shelf solution, you save a lot of time and money on the development, but you lose flexibility and functionality.
If you have a medium-sized (online store, finance, and enterprise) or large (social networks and marketplaces) web application solving non-trivial tasks, then you need to develop an app from scratch using programming languages and frameworks.
Development Team and Budget
There is always the possibility that you will need to hire or replace employees during a project, so you need to think twice about your tech stack before you start web app development.
As for costs, it is important to have a general idea of your project budget. In terms of employee costs, let’s take a quick look at salaries associated with certain technologies in Stack Overflow.

Dev Community and Documentation
As we mentioned previously, the more popular the language or framework, the more extensive the community of developers. The more prominent and active the community around the language, the more ready-made solutions and tools exist.
In a nutshell, popular technologies will have more widely available solutions for non-standard tasks and will allow for comfortable, faster, and better development. In the long run, more popularity means you could easily maintain the product in the future.
Possibility of Integrating With Other Solutions
It is usually the case that a project relies on interactions with the application programming interface (API) of third-party services. The presence of a software development kit (SDK) for such services dramatically speeds up and simplifies development.
Please note that SDKs are not available for all popular languages. Therefore, you should pay attention to the documentation of the services used, which languages they have an SDK for, and how complicated development would be without an SDK.
Time to Market
We strongly recommend that you don’t rush development. However, if time is critical to your project’s development, then you should make your deadline clear to developers so they can choose an appropriate tech stack that favors development speed.
In this case, you wouldn’t choose C# or Java because projects that use these languages take longer to develop. On the other hand, projects built with PHP or JavaScript can be developed at a quicker pace.
Third-party integrations will help add functionality without the need to write it from scratch. Sticking to a popular technology will also save time on seeking out developers. And to top it all off, well-documented technologies facilitate the development of some features.
Remember, any high-quality project takes time. Using technologies that require less development time may cause the quality of the project to suffer.
Tech Stacks Behind Popular Web Apps
Let’s take a look at the stacks that are at the core of some popular web applications that have proved their performance.
-
— a global e-commerce store.

-
— a multilingual online encyclopedia.

-
— the world’s biggest social network.

-
— an online marketplace that lets people rent out their properties or spare rooms to guests.

-
— a social network aimed at helping people share and find new interests.

-
— a popular news aggregator and discussion platform.

-
— a business communication platform.

Technology Stack at Orangesoft
At Orangesoft, we have found a perfect technology stack for our projects, uniting the best from web app development . Our tech stack helps us solve all our tasks and ensures quality and a speedy development process.
We use JavaScript and React.js on the frontend, and we use Symfony (PHP) and Node.js on the backend. As for databases, we use MySQL, PostgreSQL, and MongoDB.

If you are uncertain about the right tech stack for your project, you can always book our free consultation. From there, all you have to do is describe your project and technical specifications. Our specialists will do the research for you and send you a proposal detailing the best technology stack options you can use to transform your vision into reality.
Which stack is best for web development?
HTML, Javascript, and CSS are the staple components of a frontend technology stack for a web application. Backend tech stacks vary based on the app requirements and the goals of an app. For example, PHP is traditionally used for writing content management systems, while Python has a large application area and can power everything from web applications to machine learning apps.
What technologies do web apps use?
When it comes to the front end, web applications are usually coded with Javascript, HTML, and CSS. As for server-side programming, Python, Java, Go, and PHP are the go-to technologies for the back end of web applications.
What is the technology stack for web apps?
In web apps, a technology stack includes frontend technologies, backend programming languages, databases, caching systems, and web servers. Other technologies, such as containerization, retrieval tools, and more, can also be used when building a web application. The choice of an optimal tech stack depends on the unique needs of each application.
What is the most common tech stack for web development?
The MERN stack (MongoDB, Express.js, React, and Node.js) is one of the most popular tech stacks used in web application development. The MEVN and MEAN stacks are variations of the MERN stack that employ different frontend frameworks.
Is Java good for web application development?
Java has a wide scope of applications, including Android apps, desktop programs, and backend servers. Along with its variety, Java is also known for its portability across platforms, stability, and high performance. Java is also a time-tested technology with a rich ecosystem and an avid community of developers. These factors make Java a great choice for web application development.
Как правильно выбрать стек для своего проекта?

Успешность любого IT-продукта напрямую зависит от того, насколько удачно и грамотно подобраны инструменты для его создания. Этот набор инструментов так и называется — технологический стек. От него зависит специфика разработки, ее стоимость, сложность длительность. Давайте разберемся, что такое стек технологий и как правильно его подобрать.
Что такое технологический стек
IT продукты разрабатывают люди. Но эти люди используют инструменты, позволяющие создать необходимый функционал. К примеру, стек технологий для веб разработки – это набор языков программирования, различных фреймворков, программного обеспечения и других инструментов, которые позволяют разработать сайт или веб-приложение.
Сам же IT -продукт состоит из двух частей: серверной и клиентской. Клиентская часть – это визуальная, видимая часть приложения, с которым контактирует пользователь. На серверной части проводятся процессы, влияющие на логику приложения, базу данных и архитектуру. Для frontend разработки подбираются одни инструменты, для бэкенд – другие.
Сравнение Frontend-фреймворков
Современные фреймворки очень функциональны, с ними можно создавать практически любой веб-продукт. Какой именно выбрать? Назовем самые популярные.
React
На самом деле React не является фреймворком в привычном понимании слова. Это очень популярная UI-библиотека, которую разработала компания Meta (Facebook).
Технология используется для разработки бэкенд логики и клиентской части, для создания простых приложений со стандартной логикой. У React богатая экосистема, которая стабильно поддерживается компанией. Разработка обходится дешево, поэтому React часто входит в стек разработки самых разных проектов. Хороший выбор, если ваш продукт в своей основе достаточно прост.
Angular

Это инструмент от Google, главный оппонент React, предназначенный для комплексной работы. Он позволяет создавать продукты с расширенной логикой.
Сам процесс разработки на Angular более длительный, что повышает стоимость разработки. Но и продукты, которые включают в технологический стек Angular, получаются более гибкими и функциональными. Если вы планируете создавать мощное большое приложение с уникальными возможностями, то Angular – отличный выбор. Этот фреймворк позволит масштабировать продукт в дальнейшем. Но найти Angular-разработчиков, как правило, сложнее..
Vue.js
Vue.js – это молодая технология, которая учится на чужих ошибках. Она вобрала лучшие качества двух предыдущих инструментов. Это независимая и простая в работе UI-библиотека, хорошо подходит для малых проектов или MVP.
Стек используемых технологий в таких продуктах обычно невелик, а разработка проходит быстро и дешево. Как правило, это простые приложения, решающие конкретные бизнес-задачи.
JavaScript или TypeScript?
Чтобы создать клиентскую часть, необходимо определиться с языком программирования. На арену выходят два наиболее распространенных: JavaScript и TypeScript. Если стек технологий включает Angular, то лучше использовать TypeScript. Это синтаксическое расширение языка JavaScript, решающее множество проблем.
При работе с Vue.js и React использовать TypeScript не обязательно, но вполне возможно. В этом языке программирования вероятность допустить ошибку в коде значительно снижается, что ускоряет процесс разработки. Процесс обслуживания приложения становится проще, а сам TypeScript поддерживается всеми современными фреймворками.
Еще одно преимущество этого языка – возможность создать пользовательский интерфейс раньше, чем бэкенд. Если вам известна архитектура приложения и понятны процессы, то разработка может идти параллельно.
JavaScript является более распространенным языком программирования и нередко входит в стек технологий фронтенд разработки на проектах разного масштаба. Особенно если используется React и Vue.js. Кроме того, начинающие разработчики не всегда готовы рисковать и использовать TypeScript.
CSS, Less или Sass?
Как визуально «одеть» приложение или сайт? Выбор технологии для реализации проекта зависит от поставленных задач, ведь сегодня можно реализовать практически любую идею. Но есть нюансы.
При разработке большого продукта с множеством функций и широким интерфейсом использовать только CSS невыгодно. Файлы получатся большими, скорость загрузки и работоспособность снижаются. Но если использовать препроцессоры Less или Sass, код получается более чистым. Кроме того, упрощается поддержка и масштабирование веб-продукта.
Если разработчики предлагают добавить в технологический стек Less или Sass кроме CSS, поинтересуйтесь, с какой целью и что вам это дает. Как правило, добавление таких технологий оправдано.
Что следует учитывать при выборе технологического стека для проекта?
Выбор технологии для реализации проекта – залог качественной разработки. С одной стороны можно сэкономить средства и получить рабочее приложение, сокращая стек. С другой же – можно увеличить длительность разработки и усложнить этот процесс. Поэтому при выборе следует учитывать следующее:
- Размер и тип проекта. Чем больше ваш продукт, тем больше потребуется инструментов для его реализации.
- Сложность проекта. Она напрямую влияет на стек технологий и определяет, сколько инструментов будет задействовано и какое количество специалистов потребуется.
- Скорость разработки. Все хотят как можно скорее. Но некоторые вещи невозможно быстро реализовать, другие же потребуют привлечения дополнительных специалистов.
- Стоимость специалистов. Каждый сотрудник получает зарплату. Чем больше технологический стек, тем больше потребуется специалистов, это стоит учитывать при выборе инструментов.
- Доступность специалистов. Не на каждую технологию быстро найдется специалист. Скажем, с Angular работает гораздо меньше людей, чем с React.
- Доступные инструменты разработки. Программисты и дизайнеры могут реализовать любую задумку. Но насколько доступны инструменты для этой реализации? Поэтому стоит обратить внимание, соответствует ли стек разработки с потребностями.
- Наличие готовых решений. Некоторые фреймворки имеют готовые шаблоны, что позволяет ускорить и удешевить разработку.
- Гибкость решения. Чем больше возможностей, тем лучше, но и стоимость обойдется дороже.
- Наличие широкого сообщества дает возможность быстро получить ответы и применять чужой опыт для решения своих задач.
- Отказоустойчивость решения. Как часто появляются ошибки? Что говорит сообщество о работе инструмента? Способен ли он выполнять задачи, которые нужны вам? Об этом лучше подумать до формирования стека.
- Тренд его развития. Этот параметр показывает, насколько актуальным будет продукт через время, получает ли он поддержку и способен ли существовать в дальнейшем.
- Наличие подробной документации облегчает процесс разработки и помогает программисту понимать, как использовать инструмент для реализации конкретных задач.
- Стоимость поддержки. Если для поддержания работоспособности требуются дорогостоящие программисты, а сам процесс занимает много времени, стоит задуматься, добавлять ли этот инструмент в стек используемых технологий.
- Требования к нагрузкам стоит учитывать в том случае, если вы создаете массовый продукт для большого числа клиентов. Если же это приложение для внутреннего пользования в компании, то требования к нагрузкам снижаются.
- Требования к безопасности является одним изключевых. Для банковского приложения и календаря с датами компании нужны разные уровни защиты.
- Кроссплатформенность. Собираетесь использовать продукт на смартфонах и компьютерах? Убедитесь, что фреймворк позволяет разрабатывать кроссплатформенные решение.
- Возможности интеграции с другими решениями. Часто расширение функционала происходит благодаря интеграциям через API. Собирая стек технологий, следует продумать эту возможность.
Это основные критерии выбора стека. Самостоятельно подобрать инструменты довольно сложно. Поэтому лучше обратиться к специалистам.
Выводы
Выбор технологии для реализации проекта – ответственный шаг. От того, какие инструменты используются, зависит качество продукта и его возможности. Поэтому мы в уделяем особое внимание подбору инструментов. Наша задача – подобрать оптимальный технологический стек, который даст вам максимально ценный продукт при минимальных затратах времени и денег.