§5.4. Браузерные скрипты
На заре интернета веб-страницы выглядели примерно так:
Всё изменилось, когда в 1995 году стажёр одной известной браузерной компании разработал язык программирования JavaScript (JS). Это язык, работающий внутри браузера и позволяющий программистам писать и встраивать в веб-страницы скрипты — особый код, который может выполняться на компьютерах пользователей.
От шутки к приложениям
Первые версии JS позволяли лишь изменять содержимое и оформление страницы, делать математические вычисления, а также обрабатывать пользовательский ввод. Кажется, что это не так много, но на самом деле даже такого набора достаточно, чтобы делать полезные или интересные вещи. Например, встроить в страницу калькулятор:
До появления JS такой калькулятор можно было сделать только используя HTTP-запросы и вычисления на сервере: вы бы нажали кнопку, браузер бы отправил данные как GET- или POST-параметры, сервер бы посчитал данные и отправил бы вам новую страницу, в которой вам был бы дан ответ. И всё ради того, чтобы сложить два числа!
Этот пример отлично показывает, что не всё уместно выполнять на сервере — несложные действия можно поручить клиентскому браузеру, ведь это, как минимум, быстрее и удобнее для пользователя. Кроме того, некоторые действия в принципе невозможно осуществить на сервере:
Со временем в JavaScript появлялись новые возможности. Внутри браузера стало возможным делать разные удивительные вещи: запускать нейросети, рисовать 3D-графику в реальном времени и даже взаимодействовать с музыкальными инструментами. Современные сайты всё меньше выглядят как гипертекстовые документы и всё больше похожи на настоящие приложения, нередко превосходя их в удобстве и возможностях.
Кто-то ещё пользуется настольными почтовыми клиентами?
Под микроскопом
Давайте рассмотрим устройство скриптов на практике. Все необходимые инструменты для этого у нас уже есть. Запустите веб-инспектор, нажав F12 или выбрав соответствующий пункт меню вашего браузера. В инспекторе выберите вкладку Console.
Браузерная консоль чем-то похожа на знакомый вам терминал. Отличие в том, что здесь можно выполнять код на JS, а не системные команды, и получать результаты его выполнения.
Не страшно, если вы не понимаете, что происходит! С тем, как устроены языки программирования и само программирование, мы познакомимся уже в следующей главе, а пока давайте веселиться.
Можно заставить браузер, например, сделать красиво, но уже самостоятельно. Для этого наберите в консоли следующий код:
document.body.style.background = "#ffaaff"
Произошло вот что: для тега вы указали новое значение атрибута style — CSS-правило background, после чего браузер перерисовал страницу с учётом этих изменений. Теперь попробуйте вернуть всё как было. Для этого можно выполнить предыдущий код, но вместо розового указать белый цвет в шестнадцатеричном формате (cм. §1.6). Если не получилось — не беда, просто перезагрузите страницу.
Хотите ещё?
- Попробуйте поиграться с этими примерами:
new Audio(«hi.mp3″).play() setInterval(()=>console.log(new Date()), 1000) document.body.innerHTML=»
В программировании часто бывает так, что надо одним разом выполнить несколько действий. Для этого действия группируют в процедуры — части кода с именем, по которому их можно многократно вызывать. Попробуйте объявить процедуру с именем hi в консоли — для этого просто скопируйте и вставьте этот фрагмент кода в консоль:
function hi()
Для простоты пока думайте о () как о значке «вызови процедуру».
Заметьте, что после объявления процедуры ничего не произошло. Но ничего и не должно было произойти — процедуру мало объявить, её надо ещё и вызвать. Это тоже несложно — просто вспомните её имя и добавьте пару круглых скобок:

Процедуры особенно полезны, когда вам нужно обрабатывать пользовательский ввод — скажем, нажатие на кнопку. Давайте посмотрим, как это сделано в кнопке Сделать хорошо. Для этого переведите веб-инспектор в режим прицеливания, нажав на в левом верхнем углу, а затем на саму кнопку. Веб-инспектор отобразит соответствующий ей элемент:
Если в Firefox вы видите во вкладке Debugger ошибку «Error: Incorrect contents fetched, please reload», перезагрузите страницу.
Видно, что у неё есть атрибут onclick со значением prettify() . Нетрудно догадаться, что этот атрибут указывает браузеру на процедуру, которую надо вызвать, когда кнопка будет нажата. Так и есть. Что же это за процедура? Можно узнать эмпирически, выполнив в консоли prettify() , но это не самый рациональный способ. Давайте лучше изучим исходный код. Для этого откройте вкладку Debugger (или Sources в Chrome), выберите текущую страницу (scripts.html) в панели слева, нажмите Ctrl-F и наберите в открывшейся панели поиска название искомой процедуры. Вы увидите вот это:
function prettify() < document.body.style.background = '#ffaaff' document.getElementById('knopka').textContent = 'Вернуть как было' document.getElementById('knopka').onclick = uglify >function uglify()
Заметьте, что процедур на самом деле две, и что ничего сложного в них нет. Первая строка в каждой функции нам уже знакома по примерам чуть выше, а document.getElementById(‘knopka’) — это способ обратиться к конкретной кнопке среди многих: во второй строке мы задаём ей новый текст, а в третьей — переопределяем её обработчик события.
Таким образом, нажимая на кнопку в первый раз, выполняется процедура prettify, которая меняет фон и делает так, чтобы отныне при нажатии на кнопку вызывалась процедура uglify. Процедура uglify в свою очередь делает всё то же, но наоборот. Получается замкнутый круг, благодаря которому в итоге кнопка то делает красиво, то возвращает всё как было.
Примечание
- В современном браузере очень много событий. Можно следить не только за действиями мыши или клавиатуры, но и, например, за этапами загрузки страницы или статусом воспроизведения видео. К слову, атрибуты — не самый лучший способ задавать обработчики событий.
Безопасность
Например, браузер хранит куки, в которых часто бывает ценная информация, а ещё он даёт доступ к ним через JS. Вот вам и уязвимость.
Разумеется, целый язык программирования в браузере — это серьёзная проблема с точки зрения безопасности, ведь формально кто угодно может получить доступ к вашему браузеру и делать в нём всё, что захочет. Эту проблему активно решают: браузеры научились спрашивать у пользователя разрешение, прежде чем что-то делать, а функций, которыми злоумышленники могут просто так воспользоваться, становится всё меньше и меньше, появляются целые политики безопасности.
Стоит отметить, что JS — это угроза не только для клиентов, но и для владельцев сайтов. Поскольку все скрипты выполняются непосредственно в браузере, у пользователей есть возможность влиять на их исполнение. Именно из-за этого все важные данные должны обрабатываться на сервере — в браузер стоит передавать только то, что точно можно показывать пользователю.
Выводы
- Браузерные скрипты — встроенные в веб-страницы программы, с помощью которых можно заставлять браузер делать практически что угодно. Их пишут на языке JavaScript.
- Скрипты всегда скачиваются и выполняются на стороне клиента. Их содержимое можно изучить с помощью веб-инспектора. В основном они состоят из процедур, которые можно вызывать.
- Скрипты не всегда безопасны.
Рейтинг языков программирования 2023
Быть успешным айтишником — значит знать все современные тренды (куда катится IT-мир) и предрекать, что будет за поворотом, а также готовиться к изменениям. Языки постоянно появляются и исчезают, а иногда модифицируются до неузнаваемости. Важно изначально запрыгнуть в ту языковую лодку, которая сможет вас катать более одного года. С этим вам может помочь статистика.
Согласно Исторической интернет-энциклопедии языков программирования c 18 века по настоящее время люди создали 8945 языка. Из них на данный момент в мире официально зарегистрировано около 700. Как выбрать идеальный язык? Как понять, что именно этот язык ты хочешь изучать? А не исчезнет ли язык сразу, после того, как я его изучу?
Гениев не остановить! — интересно, что Кен Томпсон в 1969 году написал язык B, который стал прямым предшественником современного языка С. А в 2007 он с командой энтузиастов разработал новый язык — Go.
Еще вчера мы были готовы отправить низкоуровневый язык Ассемблер на пенсию, а уже сегодня подумываем о том, что он скоро может ворваться в топы. Все это происходит потому, что он удобен для Интернета вещей: пока нам будут нужны зубные щетки и кофеварки — нам будет нужен и Assembler. Впрочем до того момента, пока не придет очередной «Кен Томпсон» и не придумает шедевр.
История за 10 лет
Давайте проследим главные тенденции последних десяти лет с помощью исследования, составленного отраслевой аналитической компанией Redmonk (ориентированной на разработчиков ПО). Ее рейтинги языков программирования созданы на основе данных Github и Stack Overflow.

Мы видим, что наиболее устойчивой пятеркой языков за 2012-2022 гг. являются JavaScript, Python, Java, PHP и С#. И это не смотря на то, что все во всю трубят, что PHP умер еще лет 5 назад! А вот Ruby сдает позиции. Зато TypeScript быстро поднялся: возможно за счет того, что он является суперсетом языка JavaScript! Большие надежды подает Kotlin, но ему еще далеко до заветной десятки.
ТОП 10 популярных языков программирования
Так что же актуально сегодня? (И, возможно, на ближайшие пару лет).
JavaScript — 1 место
JS — это мультипарадигменный язык программирования, который поддерживается всеми современными веб-браузерами и предоставляет возможность взаимодействия с пользователем, обработки событий, изменения содержимого и валидации форм, то есть добавляет интерактивности веб-сайтам и веб-приложениям. Благодаря платформе Node.js, разработчики используют JavaScript как на клиентской, так и на серверной стороне, облегчая совместимость и повторное использование кода.
Автор языка: Брендан Эйх, 1995г.
Python — 2 место
Python — это интерпретируемый язык программирования, который известен своей кросс-платформенностью, что позволяет выполнять программы на разных операционных системах без изменений. Он используется в веб-разработке, научных вычислениях, анализе данных, машинном обучении и автоматизации задач. Python поддерживает различные парадигмы программирования, включая объектно-ориентированный, процедурный и функциональный стили, а также имеет большое количество библиотек и фреймворков, что упрощает процесс написания кода.
Автор языка: Гвидо ван Россум, 1989г.
Java — 3 место
Java — это объектно-ориентированный язык программирования, который известен своей надежностью и переносимостью, что позволяет его использовать на различных платформах и устройствах. Java используется во многих отраслях, включая разработку мобильных приложений, веб-приложений. Благодаря своим возможностям для распределенных систем и сетевого программирования, Джава также широко применяется в области корпоративной разработки.
Автор языка: Джеймс Гослинг, 1995г.
Typescript — 4 место
Typescript — это строго типизированный язык программирования, расширяющий возможности JavaScript. Он предлагает статическую типизацию и дополнительные средства для разработки, такие как классы, модули и интерфейсы. TypeScript полезен для разработчиков, так как помогает обнаруживать ошибки на этапе разработки, делает код более надежным и легко читаемым. Он также предоставляет функции IDE, такие как автодополнение, проверку типов и рефакторинг, что упрощает процесс разработки и повышает производительность.
Автор языка: Microsoft, 2012г.
C# — 5 место
C Sharp — это объектно-ориентированный язык программирования, который используется преимущественно для создания приложений под платформу .NET. C Sharp объединяет простоту и эффективность языка C++ с особенностями разработки для .NET. Он предлагает широкий набор инструментов и библиотек для создания масштабируемых, надежных и безопасных приложений. Благодаря своей интеграции с платформой .NET, C Sharp предоставляет доступ к различным возможностям, таким как работа с базами данных, сетевое программирование и многопоточность.
Автор языка: Microsoft (под руководством Андерса Хейлсберга и Скотта Вильтаумота), 1998-2001гг.
PHP — 6 место
PHP — это скриптовый язык программирования, который применяется для создания веб-приложений и динамических веб-сайтов. PHP предоставляет возможности для работы с базами данных, обработки форм и создания сеансов. Благодаря своей простоте и широкой поддержке он используется во многих проектах, начиная от небольших личных веб-страниц до крупных корпоративных приложений и интернет-магазинов
Автор языка: Расмус Лердорф, 1995г.
C++ — 7 место
C++ разработан как расширение языка С. Он предоставляет возможности для низкоуровневого программирования и позволяет эффективно работать с аппаратным обеспечением. В основном он применяется в разработке игр, систем реального времени, встраиваемого ПО, высокопроизводительных приложений.
Автор языка: Бьерн Страуструп, в начале 1980-х годов.
C — 8 место
Cи — это компилируемый и статически типизированный язык., который полезен для создания системного ПО, операционных систем, встроенных систем и других ресурсоемких приложений, требующих полного контроля над аппаратными ресурсами. Он также является основой для других ЯП, таких как C++ и Objective-C.
Автор языка: Bell Labs (создатель языка — Деннис Ритчи), 1969—1973гг.
Ruby — 9 место
Ruby является динамическим, интерпретируемым объектно-ориентированным языком программирования, который широко используется в веб-разработке и автоматизации задач. Он славится своим простым и элегантным синтаксисом, что делает его привлекательным в веб-разработке, для создания API и разработки программного обеспечения в общем. Также Ruby подходит для создания веб-приложений благодаря мощным фреймворкам, таким как Ruby on Rails.
Автор языка: Юкихиро Мацумото, 1995г.
Golang — 10 место
Go — это компилируемый многопоточный язык, который применяется в таких областях, как сетевое программирование, веб-разработка и создание микросервисов, а также позволяет разрабатывать эффективное и масштабируемое программное обеспечение. Golang отличается простым синтаксисом и быстрой компиляцией, что облегчает разработку и повышает производительность приложений. А еще он предоставляет встроенные средства для работы с параллелизмом и горутинами, что делает его особенно полезным при разработке конкурентных приложений.
Автор языка: Google (проектировщики Роберт Гризмер, Роб Пайк и Кен Томпсон), 2009г.
Хотелось бы выделить еще вспомогательные языки SQL, CSS, HTML5, без них большая часть программирования была бы невозможной.
- SQL — это декларативный язык программирования, используемый для работы с реляционными базами данных. Он позволяет разработчикам извлекать, добавлять, обновлять и удалять данные из базы данных, а также выполнять сложные операции, такие как объединение таблиц и агрегирование данных.
* SQL полезен для создания эффективных и надежных систем управления данными, которые используются во многих областях, включая банковское дело, электронную коммерцию и аналитику данных.
- CSS — это язык разметки, используемый для стилизации веб-страниц. Он позволяет установить внешний вид, расположение и форматирование элементов на странице, таких как текст, изображения, фоны и шрифты, и добавить простые анимации. CSS также обеспечивает гибкость и адаптивность дизайна: с помощью медиазапросов можно легко оптимизировать внешний вид сайта для различных устройств, таких как мобильные телефоны и планшеты.
* Один из основных плюсов CSS — это возможность централизованного управления внешним видом нескольких веб-страниц. Например, если нужно изменить цвет текста или шрифт на всем сайте, достаточно внести изменения в один файл CSS, а не на каждую отдельную страницу.
- HTML5 — это последняя версия основного языка разметки веб-страниц. С помощью HTML разработчики определяют содержимое, компоненты и расположение элементов на странице. HTML является основой веб-разработки и является неотъемлемой частью создания и организации веб-страниц. Без него веб-страницы были бы лишь бессвязным текстом и изображениями. HTML позволяет создавать семантическую структуру для веб-сайта и делает его доступным и полезным для интернет-пользователей.
* Одной из главных целей HTML является переносимость — возможность отображения и работы с веб-страницами на различных платформах и устройствах с соблюдением общих стандартов. HTML делает веб-страницы доступными для всех пользователей, независимо от используемого устройства или браузера.

Список профессий, которые можно освоить, зная тот или иной язык
Для начала, чтобы не повторяться, мы выделим общие профессии, где в зависимости от проекта или вакансии, может потребоваться определенный язык:
- Веб-разработчик: JavaScript, Python, Java, Typescript, PHP, Ruby
- Backend-разработчик: JavaScript, Python, Java, C++, PHP, Ruby, Go
- GameDev-разработчик: Python, Java, C++
- Тестировщик: JavaScript, Python, Java, C, C#, С++, HTML, Ruby, Go
- ИИ-разработчик: Python, Java, C++
- Мобильный разработчик: Java, JavaScript, Ruby
- Системный администратор: Python, Java, HCL, SQL, Go
- DevOps-инженер: Python, Java, Ruby, Go.
А теперь перейдем к частностям…
JavaScript: frontend- и fullstack-разработчики, React/React Native разработчик, Angular разработчик, Vue.js разработчик, Node.js-разработчик, разработчик гибридных мобильных приложений.
Python: инженер ПО, системный программист, инженер-исследователь, разработчик ПО, билд-инженер, NLP-инженер, биоинформатик, разработчик нейронных сетей, инди-разработчик, ERP-программист. Кроме того большой спектр профессий по работе с данными: Data Scientist, инженер данных, аналитик данных, архитектор данных, аналитик Big Data, администратор баз данных, разработчик БД, BI-аналитик, GIS-аналитик, BI-разработчик, VoIP инженер, МL-инженер.
Java: Android-разработчик, разработчик корпоративных приложений, разработчик ПО, разработчик IoT, разработчик встраиваемых систем, аналитик данных, инженер-исследователь, Java-архитектор, технический писатель.
Typescript: typescript-разработчик. Знания этого языка пригодятся также Angular-, React-, Vue.js-, Node.js-, fullstack-, frontend-, backend- разработчикам.
C#: Unity разработчик, ASP.NET разработчик, Xamarin разработчик, Windows-разработчик, .NET-разработчик, backend-разработчик, тестировщик, разработчик баз данных.
PHP: full-stack разработчик, WordPress разработчик, Laravel разработчик, Symfony разработчик, Magento разработчик (платформа электронной коммерции), Drupal разработчик (CMS-система), Joomla разработчик (CMS-система), API разработчик.
C++: инженер по встраиваемым системам, алгоритмист, разработчик системного ПО, разработчик операционных систем, разработчик компиляторов, ERP-программист, инженер по работе с графикой и компьютерным зрением, разработчик ПО(робототехника).
C: Embedded-разработчик, разработчик операционных систем, системный программист, инженер электронных систем (Hardware Developer), криптограф, алгоритмист, сетевой программист.
Ruby: Ruby on Rails разработчик, фронтэнд разработчик, фуллстэк разработчик, разработчик ПО, автоматизатор тестирования программного обеспечения, написанного на Ruby, специалист по компьютерной безопасности, специалист по информационной безопасности, ERP-программист.
Go: разработчик микросервисов, Blockchain-разработчик, сетевой инженер, VoIP инженер.
Программист JavaScript

Программист JavaScript – разработчик, применяющий для написания кода мультипарадигменный язык программирования (преимущественно сценарный) JavaScript. Использование JS позволяет сделать продукт более динамичным и интересным. Кстати, в октябре наш центр профориентации ПрофГид запустил марафон «7 шагов к выбору профессии» для взрослых и школьников. Легко и непринужденно вы делаете 7 заданий безо всякой математики и головоломства. Нужно лишь слегка привлечь воображение. В результате вы получаете 1-5 профессии, которые вам больше всего подходят. Профессия подходит тем, кого интересует математика и информатика (см. выбор профессии по интересу к школьным предметам).
Краткое описание
Востребованность языка программирования JavaScript стремительно возрастает. В 2018 году он занял одно из первых мест в международных рейтингах популярности. Это неудивительно, ведь возможности JS постоянно расширяются, и он считается лучшим выбором для новичков, которые только начинают изучать программирование.
JS обладает рядом конкурентных преимуществ:
- практически все современные браузеры поддерживают JavaScript;
- широкая сфера применения;
- большой выбор полезных функций;
- относительная простота изучения.
Этот язык программирования имеет много областей применения:
- клиентская часть веб-приложений;
- серверные приложения;
- использование в AJAX, Comet;
- применение при разработке браузерных ОС и прикладного ПО, пользовательских браузерных скриптов;
- автоматизация действий офисных приложений, реализация виджетов и движков.
Мультипарадигменный язык заслужил любовь и признание front-end разработчиков. Эксперты отмечают научную ценность JavaScript, его рекомендуют для изучения в школе.
Выбираем хостинг для мобильного приложения. Часть третья: Node.js и Go – преимущества и недостатки
Серверные языки программирования и среды исполнения различаются по многим аспектам, что делает процесс выбора для конкретного случая довольно сложным. Сравним преимущества и недостатки Node.js и Go – двух популярных среди разработчиков всего мира вариантов. Попробуем разобраться, какой из них лучше.

В предыдущих частях написанного совместно с Selectel цикла статей мы рассмотрели варианты мобильных приложений, протоколы сетевого взаимодействия, системы баз данных и инструменты кэширования. Это дало нам базовое представление о требованиях к процессору, оперативной памяти и дисковой подсистеме сервера.
Серверная часть приложения воплощает в жизнь всю бизнес-логику и является наиболее важной частью продукта. Качество приложения определяется многими факторами: способностью эффективно обрабатывать запросы и возможностями масштабирования, а также поддержкой кода и общей безопасностью системы.
Чтобы помочь вам сделать правильный выбор, мы сосредоточимся на двух вариантах: Go и Node.js. В последнее время они наиболее активно развиваются и являются наиболее многообещающими серверными технологиями.
Другие статьи цикла:

- Часть первая: технологический стек
- Часть вторая: базы данных и системы кеширования
Node.js
Node.js – это кроссплатформенная среда исполнения JavaScript с открытым исходным кодом, которая часто используется для создания сетевых сервисов. Node.js характеризуется легкой кривой обучения, которая позволяет создавать быстрые и масштабируемые приложения на JavaScript – эта среда отлично подходит для быстрого прототипирования и отличается изобилием библиотек с открытым исходным кодом.
Как появился Node.js
История Node.js начинается с JavaScript, одного из самых любимых языков программирования всех времен. JavaScript был создан в 1995 году и в то время использовался исключительно для веб-разработки, но применять его исключительно как язык программирования сценариев на стороне клиента было бы непрактично.
Почему бы не использовать JS за пределами браузера?
В 2009 году Райану Далю пришла в голову блестящая идея: он взял движок Chrome V8 и встроил его в программу на C++. Получившееся творение увидело свет под названием Node. Так родился Node.js!
Node.js подходит для выполнения кода на серверной стороне, в нем есть несколько модулей, которые предоставляют JavaScript возможности, необходимые для мобильных, настольных и серверных приложений. Таким образом Node.js позволил программистам использовать свой любимый JavaScript не только для интерактивной веб-разработки, но и для других целей!
Для чего используется Node.js
Node.js идеально подходит для масштабируемых, ресурсоемких и даже для приложений реального времени. Это связано с неблокирующей асинхронной природой среды. Что это значит? В Node.js один поток предназначен для обслуживания нескольких запросов. Когда поступает запрос, для его обработки используется один поток. Если нам нужно обратиться к базе данных для получения ответа, поток не ждет ответа от базы данных. Скорее он переходит к другим запросам, и когда база данных готова вернуть данные, она помещает их в очередь событий. Очередь постоянно контролируется Node.js, поэтому клиенты обслуживаются непрерывно.
Управляемая событиями архитектура (механизм обратного вызова) делает Node.js идеальным выбором для обработки сотен тысяч одновременных запросов.
Благодаря неблокирующим асинхронным алгоритмам работы Node.js идеально подходит для приложений с интенсивным использованием данных, приложений с высокими требованиями к масштабируемости и приложений, требующих высокой производительности в течение всего срока службы.

Go
Go (GoLang) – это статически типизированный компилируемый язык программирования с открытым исходным кодом, включающий сборщик мусора. Он чрезвычайно быстр (приложения на Go компилируются сразу в машинный код) и эффективен, поскольку построен с использованием языка C. Разработчики Go определенно не страдают от крутой кривой обучения.
Несмотря на кажущуюся простоту, Go был разработан для решения серьезных задач. Он хорошо известен поддержкой параллелизма для многоядерных машин, на которых работают веб-серверы. Параллелизм был и остается одной из главных сильных черт GoLang.
Как появился язык программирования Go
Язык Go был создан в Google примерно в 2008 – 2009 годах, чтобы помочь технологическому гиганту решить конкретные проблемы того времени. Среди них можно выделить разработку многопоточных, сетевых приложений и веб-сервисов. По словам создателей GoLang (Кен Томпсон, Роберт Гриземер и Роб Пайк), старые языки не решали, а обходили современные проблемы. Таким образом они придумали новое решение, адаптированное к конкретным потребностям бизнеса.
Более того, GoLang был создан как относительно простой язык, который легко понять и использовать. Эти характеристики языка позволили получить более читаемый код, высокую надежность и упростили обслуживание проектов, построенных с использованием GoLang.
Для чего используется Go
GoLang – это в основном серверный язык, хотя область его применения стремительно растет. Он был создан для решения современных технических задач, и лучше всего показывает себя в следующих областях:
- сетевое программирование;
- обработка большого количества данных;
- облачные вычисления;
- машинное обучение;
- обработка гео-данных;
- микросервисы;
- работа с потоковым аудио и видео;
- инструменты разработки.
Итак, Go – это популярный статически типизированный язык программирования с открытым исходным кодом, исполняемый на стороне сервера и обладающий высокой производительностью. Это компилируемый язык, умеющий эффективно управлять памятью (с использованием сборщика мусора) и задействовать преимущества многоядерных процессоров. Количество разработчиков на Go постоянно растет.
Node.js vs Go
Node.js против Go – довольно спорное сравнение, поскольку это два разных инструмента разработки. Они принадлежат к разным классам технологий: языкам программирования и средам выполнения соответственно. Сравнение Node.js и GoLang – де-факто неправильная вещь, так как нельзя сравнивать микроскоп с телескопом!
- GoLang – это статически типизированный язык программирования со сборкой мусора, обеспечивающий высокую производительность, а Node.js – это кроссплатформенная среда выполнения (а не язык или фреймворк). Если Go, если можно так выразиться, работает сам по себе, то Node.js на самом деле помогает JavaScript функционировать как серверный язык.
- Оба они используются во всем мире как признанные технологии. У них есть отличное сообщество и армия поклонников, их используют в крупных ИТ-компаниях, среди которых есть такие громкие названия, как Google, Netflix и PayPal. Еще одна общая черта – они используются в основном для backend-разработки.
- В то же время Node.js и Go однозначно нельзя сравнивать между собой: ни один не лучше и не хуже другого. В целом не слишком корректно навешивать на инструменты разработки ярлыки ПЛОХО или ХОРОШО, поскольку каждая технология предназначена для решения конкретных задач. Если в какой-то момент один инструмент действует «хуже», чем другой, может быть, он просто не предназначен для такого использования?
Следует тщательно выбирать язык программирования, на котором программа может быть эффективно разработана. Если говорить о Go vs Node.js, стоит учесть следующие факторы.
Критерий №1: зрелость
Хотя Go был представлен в 2009 году, его можно считать зрелым и надежным инструментом. В то же время Node.js демонстрирует тот же уровень зрелости и пользуется поддержкой широкой аудитории.
Итак, с точки зрения зрелости Node.js и GoLang почти одинаковы.
Критерий №2: чистая производительность
Google решил представить Go из-за разочарования специалистов в существующих языках программирования. По сравнению с Node.js, Go – лучший вариант для чистой (raw) производительности и вычислений.
С другой стороны, интерпретируемый Node.js является производным от JavaScript и, следовательно, обычно работает медленнее, чем другие языки программирования. В отличие от Go, Node.js не может предложить чистую производительность ЦП или задач, связанных с памятью. Проще говоря, Node.js может работать одинаково хорошо или ужасно, в зависимости от качества кода и специфики вашего приложения.
В сравнении производительности Go превосходит Node.js в среднем в два и более раза и помогает разработчикам добиться лучшей производительности.
Критерий №3: производительность в реальной жизни
Go показывает в два раза лучшую производительность по сравнению с Node.js даже в стандартном исполнении. Помимо того Go имеет подходы которые, позволяют получить еще большую производительность при реализации реальных задач.
Грамотное использование горутин (сопрограмм) совместно с гетерогенной архитектурой доступа к данным (база данных + кеш) или масштабированием на основе партиционирования позволяют сделать эту разницу еще более существенной.
Критерий №4: обработка ошибок
Обработка ошибок в Go требует от вас реализации явной проверки. Ошибки времени компиляции и выполнения обрабатываются по-разному, что создает сложности для разработчиков.
С другой стороны, Node.js реализует традиционный механизм обработки ошибок типа throw-catch, который довольно популярен среди программистов. При таком традиционном подходе ошибки отображаются и исправляются непосредственно перед исполнением следующих операций.
Сравнивая механизм обработки ошибок GoLang и Node.js, многие веб-разработчики находят Node.js лучше, поскольку они хорошо знакомы с подходом throw-catch.
Критерий №4: кривая обучения
Go – это зрелый и в тоже время относительно новый язык с собственными концепциями, процессами, правилами и интерфейсами. Ему посвящено меньше интернет-ресурсов, поэтому разработчикам приходится проводить исследования, чтобы получить достойное представление о языке.
С другой стороны, JavaScript – наиболее часто используемый во всем мире язык программирования. Разработчикам легко изучить Node.js, если у них есть базовые знания о JavaScript. Поскольку JavaScript существует давно, доступно множество онлайн- и оффлайн-ресурсов для помощи новичкам, а также существует огромное сообщество, которое делится опытом и предлагает помощь.
Таким образом, в сравнении кривой обучения Go и Node.js побеждает последний.
Критерий №5: параллелизм
Параллелизм – сильная сторона Go, так как он лучше всего подходит для крупных высоконагруженных проектов, требующих одновременной обработки тысяч запросов. Go использует горутины и облегченный механизм взаимодействия потоков, который позволяет разработчикам выполнять функции одновременно. Хотя пользователи могут одновременно запускать свои функции с помощью Go, это, к сожалению, не относится к Node.js.
Node.js является однопоточным и использует механизм обратного вызова событий, а значит все должно выполняться в линейном порядке и нет никакого параллелизма.
Итак, в этом раунде Go vs Node.js, Go – чемпион!
Критерий №6: масштабируемость
Go также уверенно выигрывает в битве масштабируемости Go vs Node.js. Горутины позволяют эффективно и надежно обрабатывать параллельные потоки. С другой стороны, масштабируемость Node.js менее функциональна.
Таким образом, Node.js не рекомендуется для крупных проектов из-за слабой поддержки многопоточного исполнения.
Критерий №7: инструменты разработки
Go поставляется с приличным набором библиотек, но по сравнению с Node.js разработчикам доступно меньше готовых инструментов.
Что касается Node.js, он предлагает разработчикам широкий набор инструментов, фреймворков и библиотек для создания всевозможных приложений. Более того, у JS есть огромное сообщество, которое обеспечивает поддержку для всех задач разработки.
Таким образом, Go проигрывает битву, когда дело касается инструментов разработки.
Критерий №8: доступность разработчиков
Найти разработчиков на Go может быть сложнее, чем разработчиков на Node.js. Однако ситуация стремительно меняется и со временем это не будет являться столь критичной проблемой.
Критерий № 9: Сообщество
Node.js – это зрелый инструмент с большим и динамичным сообществом. В первый год своего существования фонд Node.js сформировал команду ответственных за безопасность профессионалов и разработал долгосрочный план поддержки для повышения стабильности. На сегодняшний день репозиторий Node.js имеет 82100 звезд и 21400 форков на GitHub, а также аудиторию в 197000 участников на Reddit.
Сообщество Go с каждым годом продолжает расти. Поддержка Google – довольно веская тому причина. Ежегодный GopherCon собирает разработчиков со всего мира, чтобы обсудить новые возможности и изменения. Эта конференция привела к увеличению количества разработчиков, заинтересованных в участии в сообществе и в связанных с Go. На сегодняшний день репозиторий GoLang имеет 90400 звезд и 13300 форков на GitHub, а также аудиторию в 159000 участников на reddit.com.
Рассматривая такие показатели, как звезды или форки на Github, можно получить представление о количественном соотношении использующих технологию разработчиков и разработчиков, делающих вклад в нее.
Итог
Go занимает лидирующие позиции во всем мире превосходит Node.js в большинстве сценариев, включая производительность, параллелизм, масштабируемость и простоту, но библиотеки Node.js великолепны. Поскольку популярность Go неуклонно растет, можно быть уверенным, что со временем для него будет разработано больше библиотек и инструментов.
Многие компании решили перейти с текущих технологий (включая Node.js) на Go, чтобы повысить производительность программного обеспечения.
Однако на практике выбор технологии для создания приложения тесно связан со знанием этой технологии вашей командой и общей производительностью, которой вы можете достичь с ее помощью. Поиск разработчиков или их знакомство со стеком технологий часто является одним из определяющих факторов.
Итак, если вы очень хорошо разбираетесь в разработке на JavaScript и нуждаетесь в библиотеках Node.js, эквивалент которых может быть недоступен для Go, а также если функциональность Go не столь критична для вашего приложения, Node.js может быть хорошим выбором. В противном случае лучше остановить свой выбор на Go!
Во второй части я упомянул кастомные решения для построения эффективных баз данных RocksDB и BadgerDB. Также стоит упомянуть что BadgerDB – потрясающее хранилище для графовой системы управления базой данных Dgraph, которое написано на Go. А эти парни знают толк в построении баз данных и умеют выжать максимум из инструмента. В случае выбора Go для реализации серверной части у вас будет возможность поработать с ним, не нарушая консистентность проекта.
Чтобы ускорить работу системы, выберите провайдера инфраструктуры, который наилучшим образом соответствует требованиям вашего ресурса: объем накопителя, процессор и количество ядер, объем оперативной памяти и ежемесячного трафика, наличие резервного копирования, быстрая техническая поддержка. Эта статья написана совместно с нашим партнером – компанией Selectel.
Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков.
