Verification: a143cc29221c9be0

Node js vs php сравнение скорости

Node js vs php сравнение скорости

Содержание

Что такое Бэкенд Приложения?

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

Что такое Язык Программирования?

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

  • Язык программирования высокого уровня

На этом типе языка пишут коды со словами и символами, которые напоминают слова и символы, используемые нами в повседневных разговорах. Именно поэтому коды языка программирования высокого уровня легко читаются и изучаются.

  • Язык программирования низкого уровня

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

10 Самых Популярных в Мире Языков Программирования для Бэкенда

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

JavaScript

В течение последних почти десяти лет JavaScript был самым популярным языком программирования согласно ежегодному опросу сайта StackOverflow. В недавнем Опросе разработчиков, проводившемся в 2020 году, 69,7% респондентов выбрали JavaScript в качестве наиболее часто используемого языка программирования.

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

После того, как Express.Js и Node.Js стали использоваться вместе, разработчики стали использовать JavaScript одновременно как фроненд, так и бэкенд язык разработки. Он также предлагает интерфейс прикладного программирования (API) для создания различных приложений, включая мобильные, гибридные, WEB, одностраничные и многостраничные приложения. 

Характеристики

Быстрая разработка: Учитывая, что один и тот же язык используется как для фронтенд, так и для бэкенд разработки, программисты могут создавать WEB и мобильные приложения быстрее с помощью JavaScript.

Меньше нагрузки на скрипты: Некоторые встроенные функции JavaScript, такие как DOM и hoop, повышают эффективность написания кода и повышают производительность, а также уменьшают нагрузку на скрипты.

LeanBackendTechnology: JavaScript использует бэкенд-платформы, такие как Express.js, которые служат промежуточным программным обеспечением для решения нескольких задач разработки. Они предоставляют различные функции, такие как данные POST, заголовки швов, обработка ошибок, регистратор HTTP-запросов и многое другое. Кроме того, правила программирования JavaScript не такие строгие, что дает разработчикам больше свободы в работе с выбором промежуточного программного обеспечения.

Сокращение затрат: эффективность JavaScript снижает затраты на программирование и затраты, необходимые для разработки приложений. Так как один и тот же язык программирования используется для создания как фронтенд, так и бэкенд кода.

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

Функции ввода-Вывода: Основа в виде Express.js и Node.js позволяет языку обрабатывать тысячи запросов ввода-вывода и уведомлений от подключенных приложений. 

Ограничения

  • Функции бэкенда языка JavaScript, управляемые событиями, несколько сложны, что заставляет разработчиков с опытом работы на других платформах неправильно интерпретировать обратные вызовы. Эта проблема была частично решена в последних версиях.
  • Многие программисты, использующие серверную разработку JavaScript, не понимают, как работает промежуточное ПО.
  • Размещение бэкенд-фреймворков JavaScript с базой данных MySQL довольно сложный процесс.
  • Некоторые разработчики считают, что стандартный подход к разработке предпочтительнее той свободы, которую предлагают непроверенные бэкенд-фреймворки JavaScript.

Python

С тех пор как Python был создан в 1991 году Гвидо ван Россумом, он превратился в один из ведущих универсальных языков программирования в современном мире. Бэкенд-разработчики используют его точный и легко читаемый код для создания функциональных сценариев обработки бэкенд-событий.

Опрос 2020 года сайтом Stack Overflow показал, что это лучший язык программирования для бэкенда, который разработчики хотят изучать. Python возглавляет эту категорию в течение четырех лет подряд. Он также занял 3-е место среди самых любимых языков программирования в мире. 

Характеристики

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

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

Экономия Средств: помимо того, что Python является бесплатной платформой с открытым исходным кодом, он также предлагает множество бесплатных инструментов и ресурсов, которые улучшают проекты разработки приложений.

Возможности Интернета вещей: разработчики могут использовать современные функции Python для создания физических объектов Raspberry Pi.

Встраиваемые коды: с помощью правила Write Once Run Anywhere («Написав один раз, можешь использовать всегда») код Python может быть встроен в исходный код других языков, таких как C ++.

Ограничения

  • Выполнение кода Python становится медленным, если он прерывается. Этот недостаток вредит всему проекту разработки приложений.
  • Уровень доступа к базам данных Python менее развит по сравнению с другими языками программирования для бэкенда.
  • Для обнаружения ошибок и багов в кодах Python требуется масштабное тестирование.
  • Он сильно зависит от сторонних фреймворков и библиотек. 

Ruby

Ruby был разработан в 1990 году японским компьютерным экспертом Юкихиро Мацумото. Язык программирования имеет схожий синтаксис с Python, Java и Perl также стал одной из ведущих бэкенд-технологий на сегодняшний день. Это популярная платформа для разработки WEB-приложений, и большинство разработчиков предпочитают ее для создания прототипов.

Некоторые из ведущих онлайн-платформ, таких как Shopify, Airbnb и Etsy, используют Rubyдля автоматизации внутренних задач. Объектно-ориентированные, гибкие и легко масштабируемые функции делают ее очень популярной платформой.

Характеристики

Высокая производительность: Ruby очень продуктивен для выполнения бэкенд-задач благодаря хорошей читаемости кода и множеству сторонних библиотек. Разработчики могут получить доступ ко всем необходимым инструментам в Ruby; им вряд ли может понадобиться доступ к внешней документации.

Метапрограммирование: Ruby поддерживает метапрограммирование, которое позволяет программе получать данные из других программ и изменять себя во время работы. Наряду с другими инструментами, такими как макросы, скрипты и интроспекция, можно сильно ускорить написание проектов в Ruby.

Огромная библиотека: Ruby может использовать доступ к сторонним модулям, доступными в RubyGems.

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

Быстрый и надежный: Бэкэнд-скрипты могут быть созданы быстрее с помощью Ruby по сравнению с другими скриптовыми технологиями. Методы объектно-ориентированного программирования делают Ruby более устойчивым и превосходным для создания запросов и обработки результатов. На нем можно писать код на 40% быстрее, чем на многих других скриптовых языках. 

Ограничения

  • Время исполнения на других скриптовых языков относительно быстрее, чем у Ruby.
  • Несмотря на наличие сообщества с открытым исходным кодом, Ruby имеет ограниченные источники и библиотеки.
  • Ruby является новым по сравнению с другими языками программирования; существующие бэкенд-разработчики считают его сложным для изучения.
  • Код Ruby сложно отлаживать.

PHP

PHP был разработан Расмусом Лердорфом в 1994 году; с тех пор PHP превратился в один из самых популярных в мире языков программирования для бэкенда. На самом деле, опрос W3Tech показывает, что более 79% веб-сайтов во всем мире работают именно на нет. 

Характеристики

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

Открытый исходный код и универсальность: В Интернете существует множество бесплатных PHP-библиотек, которые разработчики могут использовать для быстрой разработки бэкенда. Почти все операционные системы, такие как Windows и Linux, поддерживают PHP. Кроме того, PHP-приложения также могут быть запущены на любом веб-сервере.

Экономичный вариант: PHP находится в свободном доступе и пользуется поддержкой активного сообщества разработчиков. Нанять PHP-разработчика сравнительно не дорого. Опрос разработчиков Stack Overflow 2020 года о самых высокооплачиваемых технологиях поставил PHP на предпоследнюю позицию.

Простота в использовании: Появилось много фреймворков на PHP, которые упрощают программирование, убирая необходимость писать утомительные SQL-коды. Некоторые из них используют систему Объектно-реляционного отображения (ORM), которая работает как model-view-controller («Модель-Представление-Контроллер» или MVC) для быстрого написания серверных функций.

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

Автоматизация Функций: Функция сценариев PHP делает его пригодным для создания автоматизации, например, аутентификации, сопоставление URL-адресов, управление сеансами и многое другое.

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

Ограничения

  • Влияние PHP как технологии разработки идет на убыль. В наши дни люди почти не изучают PHP.
  • PHP не может эффективно конкурировать с современными технологиями разработки, такими как Ruby и Python, из-за ограничения количества библиотек.
  • Как платформа с открытым исходным кодом, PHP часто неправильно используется, что приводит к созданию кодов с ошибками. 

Java

Индекс TIOBE 2021 года ставит Java на второе место среди современных технологий для бэкенд-разработки. Этот рейтинг показывает, что Java является одним из самых влиятельных языков программирования на сегодняшний день. Джеймс Гослинг изобрел язык программирования в 1991 году, но только в 1995 году Sun Microsystems выпустила его.

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

Характеристики

Масштабируемый и простой: Java Enterprise Edition полезен для создания масштабируемых приложений, позволяя серверу запускать несколько экземпляров одновременно. Компоненты Java легко доступны, а его синтаксис сравнительно прост для понимания. Все эти особенности делают его выдающимся в качестве технологии разработки бэкенда.

Многопоточность: Java способна обрабатывать запросы в независимых потоках на многопоточном WEB-сервере. Вот почему Java отлично работает с приложениями, требующими огромной мощности процессора.

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

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

Ограничения

  • Программирование на Java дорого и отнимает много времени
  • Низкоуровневое программирование и команды для сбора мусора изначально отсутствуют.
  • Высокая стоимость аппаратных требований делает реализацию бэкендов на базе javaдостаточно дорогой.
  • Swing toolkit, приложение для разработки графического интерфейса Java, лишено интригующего интерфейса других современных графических инструментов.

C# .NET

Одним из самых популярных языков программирования для бэкенд-разработки является C#, обычно называемый C-Sharp. Он отлично справляется с автоматизацией написания кода на серверах Windows и WEB-платформах (используя ASP.Net фреймворк.) C-Sharp, который является сравнительным продолжением C++, существует уже давно.

C# находит широкое применение в разработке настольных приложений и встраиваемых системах. Он выполняет код быстрее, чем большинство языков программирования. C# использовался для создания Unity-подобных платформ для разработки игр и создания CLI-приложений. 

Характеристики

Кросс-Платформенная разработка: Приложения с бэкендом на C-Sharp могут работать на нескольких операционных системах, таких как macOS, Windows, Linux и т. д. Чуть позже мы рассмотрим кроссплатформенную разработку.

Объектно-ориентированный язык: Как объектно-ориентированный язык, код C# использует классы и отношения. Этот подход позволяет повторно использовать фрагменты кода и легко устранять неполадки кода.

Cовместимость: приложения C# имеют обратную совместимость с устаревшими системами. Например, организации, которые все еще используют старые версии фреймворков программирования, считают C# бесценным.

Функция сбора мусора: C-Sharp имеет функцию, которая очищает всю систему от мусора. Это отличная функция, которая ускоряет выполнение программы. Лучше всего то, что система продолжает оптимально функционировать во время процедуры сбора мусора.

Ограничения

  • Как высокоуровневый язык программирования, код C# не может напрямую взаимодействовать с аппаратным обеспечением.
  • C# очень ограничен по сравнению с другими бэкенд-технологиями, потому что он работает только на платформе .Net Framework и может быть установлен и запущен только с компьютера Windows.

Perl

Ларри Уолл разработал Perl более трех десятилетий назад, и это универсальный язык сценариев все еще набирает силу сегодня. На самом деле, недавний опрос разработчиков Stack Overflow оценил Perl как самый высокооплачиваемый язык программирования во всем мире. Неудивительно, что другое исследование той же компании включило Perl в топ-3 самых страшных для изучения языков программирования.

Хотя Perl может показаться древним языком, Perl 5 все еще широко используется для автоматизации и прототипирования.

Характеристики

Работает на многих платформах: Perl работает на многих операционных системах, включая Mac, Windows, Linux и Unix.

Открытый исходный код: Как и другие языки программирования с открытым исходным кодом, Perl предоставляет множество библиотек. Однако вам, возможно, придется заплатить сравнительно небольшую “плату за копирование”, чтобы получить доступ к библиотекам.

Расширяемость и встраиваемость: Perl может использовать TWIG и XS для поддержки внешних библиотек C и C++. Коды Perl также могут быть встроены в программы C и C++.

Функции Обработки Текста: Возможности обработки текста Perl превосходны. Последняя версия Perl по-прежнему поддерживает соответствие POSIX и сохраняет те же расширенные функции для обработки вызовов сокетов. 

Ограничения

  • Исправление ошибок и изоляция зараженных данных в Perl является сложной задачей.
  • Обработка Perl не так превосходна, как у других языков.
  • В доступных библиотеках Perl отсутствуют расширенные функции.
  • Perl считает сложным для обработки большого объема кода.
  • Он отстает по скорости и масштабируемости функций.
  • Бэкенд-инженер Perl обходится дорого, поскольку это старый язык, который новые разработчики больше не хотят изучать.

C++

C++ это в основном язык программирования C с некоторыми дополнениями. Например, C++ ввел объектно-ориентированное программирование, добавив “классы” к своему программному архетипу. Современные языки программирования приняли объектно-ориентированное программирование в качестве стандарта, поскольку он помогает программистам писать структурированные коды, описывая отношения.

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

Характеристики

Переносимость: Одной из главных особенностей C++ является его независимость от платформы. Приложения C++ работают в различных операционных системах, аппаратных платформах и встроенных системах.

Преимущество объектного программирования: C++ добавляет огромную ценность, поддерживая объектно-ориентированное программирование, которое не поддерживается языком C. Разработчикам проще использовать C++ из-за его архетипа структурированного программирования.

Отличное управление памятью: С помощью C++ разработчики могут управлять распределением памяти более эффективно, поскольку это дает абсолютный контроль над управлением памятью.

Язык низкого уровня: Как язык программирования низкого уровня, C++ может взаимодействовать с системными устройствами. Именно поэтому C++ используется для программирования большинства аппаратных ресурсов. 

Ограничения

  • Способность C++ взаимодействовать с аппаратным обеспечением также является недостатком технологии и ее бэкенда. Злоумышленник может использовать эту лазейку для взаимодействия с аппаратным обеспечением системы.
  • В C++ отсутствует автоматическая утилита сбора мусора, которая фильтрует ненужные данные.

Kotlin

Kotlin приобрел популярность в последнее время благодаря его внедрению для создания приложений компанией JetBrains в 2011 году, а затем и Android Studio. Он постепенно берет верх над Java как доминирующей платформой для создания приложений для Android. Последние данные показывают, что более 60% приложений для Android были созданы с помощью Kotlin, который легко взаимодействует с Java. Это, пожалуй, одна из самых популярных платформ для мобильной разработки. 

Характеристики Kotlin

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

Простота поддержки кода: Разработчики могут быстро читать и редактировать код, благодаря четкому характеру кода Kotlin.

Совместимость Java: Kotin легко работает с Java. Нет необходимости переносить код с Java на Kotlin или наоборот. Разработчики могут вызывать код Kotlin из Java или вызывать код Java из Kotlin для добавления дополнительных функций.

Ограничения

  • Переменные и функции Kotlin не имеют примитивных типов. Этот недостаток был бы сложным для программистов, которые привыкли к примитивным типам на других языках.
  • Отсутствие примитивных типов делает проблематичными задачи управления переменными и выводом функций.
  • Компиляция Kotlin для Android-приложений происходит медленнее по сравнению с Java.

Scala

Одной из уникальных особенностей Scala является создание сжатого кода путем сочетания функционального и объектно-ориентированного программирования. Разработчики также имеют доступ к огромному массиву сред выполнения JVM и JavaScript для создания высокопроизводительных приложений. Scala совместим с Java, потому что он также работает на JVM. Программисты могут даже комбинировать оба языка для разработки уникальных решений. Одна из особенностей, которая делает Scala одним из лучших языков- это поддержка статических типов. Он снимает с разработчика головную боль по работе со статическими типами.

Характеристики

Четкий код: Методы кодирования Scala являются объектно-ориентированными и функциональными. Эта функция делает коды Scala простыми и удобными в поддержке.

Совместимость Java: Scala работает с JVM, что делает его полностью совместимым с языком программирования Java. Таким образом, независимо от того, написан ли код на Javaили Scala, он будет выводить один и тот же результат. Вот почему Java-разработчики находят Scala полезным для бэкенд-разработки.

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

Ограничения

  • Подход Scala к кодированию полностью отличается от традиционных методов программирования на Java.
  • Scala сочетает в себе функциональное и объектно-ориентированное программирование, что немного сложно для понимания некоторыми разработчиками.

Заключение

В этой статье представлены лучшие технологии бэкенд-программирования в современном мире. Мы создали данный список, обратившись к статьям авторитетных ресурсов, таким как Обзор современных WEB технологий W3Techs, Опрос разработчиков Stack Overflow 2020 и Индексу TIOBE 2021. Мы надеемся, что эта статья поможет вам выбрать лучшую бэкенд-технологию для вашего проекта приложения.

PHP

PHP

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

Для чего используется PHP? Веб-разработка с помощью PHP включает такие действия, как управление файлами cookie, сбор информации с веб-страниц и превращение статических веб-сайтов в динамику.

Создание динамических веб-сайтов PHP — одно из применений этого языка сценариев. Иногда бывает достаточно комбинировать HTML и CSS для создания статических сайтов, которые редко меняются. Однако PHP может дать дополнительный динамический эффект. Однако динамические элементы также могут быть реализованы с помощью JavaScript Node.js. Таким образом, возникает дилемма: какой язык сценариев больше подходит?

Ещё один важный аспект использования PHP — это создание динамических веб-сайтов PHP с помощью системы MySQL. PHP работает с рядом баз данных, но самой популярной из них является MySQL. Как это работает? Что ж, вы можете использовать PHP для подключения к базе данных и представления контента на HTML-страницах.

Обычно изучение PHP состоит из двух этапов:

  • Изучение концепций программирования, языка, синтаксиса и других функций.
  • Научитесь работать с фреймворком, который значительно увеличит ваши шансы на создание успешных проектов. Например, фреймворк Laravel — один из лучших и самых популярных фреймворков для веб-разработки на PHP.

JavaScript

JavaScript

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

Для чего используется JavaScript? Возможности веб-разработки на JavaScript позволяют веб-сайтам выполнять такие действия, как обновление определённых частей страницы без перезагрузки всего веб-сайта, отображение всплывающих сообщений или введение анимации в 2D или 3D графику. В целом, основное влияние оказывается на разработку на стороне клиента, но теперь JavaScript может выполнять действия и на стороне сервера.

Node.js — это среда для запуска кода JavaScript на сервере. Это главный соперник при обсуждении PHP и JavaScript. Затем браузеры загружают результаты и представляют их в веб-приложениях. Веб-разработка JavaScript на стороне сервера (Node.js) включает движок Google 8V JavaScript, однопоточный не блокирующий цикл событий и низкоуровневый API ввода-вывода.

Благодаря циклу событий Node.js обеспечивает более эффективное управление запросами. Например, пока файловая система читает файл, Node.js работает с другими запросами. После того, как система прочитает файл, она отправляет его в браузер. Другими словами, пока Node.js ожидает завершения одного задания, он переходит к другому.

Веб-разработка: PHP или JavaScript

Сравнение использования PHP и JavaScript может быть основано на внутренней или внешней веб-разработке. С точки зрения внешнего интерфейса JavaScript выполняется в браузере сразу после появления HTML и CSS на веб-сайте.

Эта тактика гарантирует, что основная структура и внешний вид будут готовы до запуска сценария JavaScript. Кроме того, JavaScript гарантирует, что клиентская сторона представляет новый контент внутри браузера (что делает веб-сайт динамичным во внешнем интерфейсе). PHP не подходит для разработки внешнего интерфейса. Таким образом, остаётся JavaScript.

Самая большая разница между JavaScript и PHP заключается в том, что PHP является строго серверным языком, тогда как JavaScript можно использовать для полномасштабной разработки. Однако давайте взглянем на некоторые другие отличия, когда речь идёт о JavaScript и PHP:

  • Одним из преимуществ использования PHP вместо JavaScript является то, что PHP может взаимодействовать с такими базами данных, как Oracle или MySQL.
  • Хотя и JavaScript, и PHP являются интерпретируемыми языками сценариев, способ интерпретации отличается. Все популярные браузеры имеют встроенные интерпретаторы
  • JavaScript. С другой стороны, PHP необходимо установить (установка проста) при использовании на стороне сервера.
  • Даже если у вас есть опыт использования JavaScript для внешнего интерфейса, это не означает, что вы сразу будете готовы к использованию Node.js. Вам нужно узнать о функциях обратного вызова, блокировке и настройке Node.js для работы.
  • Разработчики указывают, что использовать PHP проще, чем Node.js. Один из примеров — Node.js обычно требует больше строк кода.
  • Ещё одно отличие PHP от JavaScript заключается в том, что PHP выполняет операторы синхронно, что означает, что он ожидает окончания одного оператора, чтобы начать другой.
  • В JavaScript всё наоборот: он выполняет несколько задач.

Сравнение правил синтаксиса и популярности: JavaScript или PHP

Является ли PHP проще, чем JavaScript? Этот аспект зависит от вашего уровня программирования и нескольких аргументов:

  1. Возможно, вы захотите использовать JavaScript для разработки внешнего интерфейса и внутреннего интерфейса на одном языке.
  2. Если вы изучали Java в прошлом, освоить PHP будет легче.
  3. Тем не менее специалисты называют PHP более зрелым, что означает, что есть больше ресурсов, которые помогут вам изучить (примеры кода, советы по устранению ошибок и других сбоев).
  4. PHP — мощный язык, и его концепции программирования легко понять новичкам.
  5. Node.js не слишком сложен для новичков, но он определённо имеет больше уникальных функций, которые новичкам нужно будет настроить. В конце концов, JavaScript как язык сложнее PHP. Следовательно, изучение Node.js также становится сложнее.
  6. Фреймворки PHP, такие как Laravel, по-прежнему широко используются в веб-разработке, несмотря на то, что Node.js с годами стал более популярным. PHP остаётся основным языком для серверной веб-разработки.
  7. Заработная плата разработчиков PHP — одна из самых низких в мире программирования. Зачем? Потому что в бизнесе много программистов PHP. Поэтому охота за работой может стать более жаркой.
  8. Вместо обращения к разработчикам PHP можно использовать множество онлайн-сервисов. Если вы хотите создать блог, вы просто создадите учётную запись WordPress вместо того, чтобы обращаться за помощью к разработчикам. Однако PHP действительно хорош, когда дело доходит до создания оригинальных проектов, которые нельзя создать на основе шаблона.
  9. Node.js не может управлять приложениями, интенсивно использующими ЦП, поскольку он основан на событиях и является однопоточным.

Сравнение производительности Node.js и PHP

До выпуска PHP 7 можно было легко сказать, что Node.js выигрывает в вопросе производительности при обсуждении PHP и JavaScript. Однако PHP 7 создаётся на движке PHPNG, что приводит к увеличению производительности в 2 раза и увеличению потребления памяти на 50% (по сравнению с PHP 5.6).

Node.js по- прежнему быстрее PHP, когда нет необходимости обрабатывать данные в реальном времени. Поэтому, когда вам нужно создать чаты, игры, видео или большие потоки данных, вы можете выбрать PHP.

jQuery против PHP

jQuery vs. PHP — интересный вопрос, потому что jQuery даже не является отдельным языком программирования . Это библиотека (или интерфейс прикладного программирования), наполненная дополнительными функциями для JavaScript.

Использование jQuery экономит время разработчиков JavaScript, поскольку им не нужно писать код самостоятельно. Кроме того, необработанный JavaScript тяжелее jQuery. Помните, что библиотека jQuery предоставляет код только для разработки внешнего интерфейса.

Следовательно, между jQuery и PHP очень мало общего. Например, если вы программист PHP, вы не будете рассматривать использование jQuery (поскольку эта библиотека не предлагает код PHP).

Angular.js против PHP

Прежде всего, Angular.js — это ещё один фреймворк JavaScript. Таким образом, PHP — это язык программирования, а Angular.js — это просто библиотека, упрощающая разработку одностраничных приложений.

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

PHP и JavaScript вместе

Может показаться несправедливым утверждать, что PHP лучше, чем JavaScript, или что вам обязательно следует изучить JavaScript до PHP. Фактически, лучший вариант — овладеть ими обоими, вместо того, чтобы находить победителя в битве PHP против JavaScript.

Вместе PHP и JavaScript относятся к идее использования Node.js в качестве дополнения к PHP. Например, PHP может создавать сложную логику, работая с базами данных или другими задачами с высокой нагрузкой. В том же проекте вы можете использовать Node.js для управления потоками больших данных и создания лучшего пользовательского интерфейса.

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

Допустим, у вас есть поле для ввода имени пользователя, и вы отслеживаете в нём действия пользователей с помощью JavaScript. После того, как посетители вводят информацию о пользователе. А JavaScript отправляет введённую информацию в сценарий PHP и ожидает ответа. Сервер отправляет ответ, указывая, существует ли такое имя пользователя на сервере или нет.

Приведённый выше сценарий — один из наиболее распространённых способов совместного использования PHP и JavaScript.

О роли фреймворков в IT-индустрии

Я, проанализировав результаты опроса разработчиков, проведённого в 2020 году Stack Overflow, понял, что использование фреймворков играет огромную роль в IT-индустрии. А именно, речь идёт об ответах на вопрос о том, что разработчики считают самым важным при поиске работы.

Факторы, влияющие на выбор места работы

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

Разработчик обычно знаком хотя бы с одним фреймворком. Здесь я собираюсь рассказать о трёх фреймворках — о Node.js/Express, Django и Spring Boot. Полагаю, что тот, кто, готовясь к 2021 году, решит сделать своим основным инструментом один из них, в любом случае, не прогадает. Но у каждого из них есть свои особенности, которые мне и хотелось бы здесь обсудить.

Результаты исследований и другие данные


▍Данные с GitHut

Ресурс GitHut позволяет узнать различные сведения о репозиториях. В частности, речь идёт о количестве активных репозиториев, об общем количестве PR, и о разных показателях, рассчитываемых по состоянию на один репозиторий: количество PR и форков, число открытых задач, количество новых подписчиков.

Популярность языков программирования на GitHub

▍Исследование Stack Overflow

Если взглянуть на результаты исследования Stack Overflow, то окажется, что Express находится на первом месте среди бэкенд-фреймворков, которые любят разработчики. Два других интересующих нас фреймворка, Spring и Django, следуют за Express с небольшим отрывом. В результате оказывается, что проект, основанный на самом перспективном скриптовом языке, на JavaScript, лидирует, а за ним идёт проект, в котором используется один из языков, обладающих самыми широкими возможностями, то есть — Python.

Популярность веб-фреймворков

▍GitHub-репозитории

Некоторые люди не любят перемен, но изменения необходимо принимать, если альтернативой является катастрофа.
Илон Маск

Фреймворк Express создан на базе платформы Node.js, поэтому тут мы будем сравнивать репозитории Node.js, Spring Boot и Django

Репозиторий node

Репозиторий spring-boot

Репозиторий django

Как видно, больше всего звёзд у репозитория Node.js. Но разница между звёздами проектов не так сильна, как различие в количестве их форков. У Spring Boot и Django имеется гораздо больше форков, чем у Node.js.

Теперь поговорим о том, в каких ситуациях имеет смысл выбирать тот или иной из рассматриваемых нами фреймворков.

Node.js/Express

Node.js представляет собой серверную платформу, которая является частью стека технологий, охватывающих все нужды веб-разработки, и основанных на JavaScript. В Node.js используется JavaScript-движок V8, тот же самый, что применяется в браузере Chrome и в других браузерах, основанных на Chromium. В результате оказывается, что благодаря использованию Node.js код, предназначенный для выполнения на сервере, можно писать на JavaScript. На базе платформы Node.js создано множество фреймворков, включая такие популярные, как Express.

▍Сильные стороны Node.js


  • Появление Node.js сделало возможным фуллстек-разработку веб-проектов на JavaScript. В результате в распоряжении разработчиков серверных частей приложений оказались и сильные возможности JavaScript, и наработки экосистемы JS, библиотеки, которыми стало реально воспользоваться в серверном окружении.
  • JavaScript-код, аналогичный по функционалу, например, коду, написанному на C, оказывается компактнее. Производительность JavaScript-кода при этом достаточно высока для применения его в проектах, в которых важна скорость работы кода.
  • Код клиентских и серверных частей проектов легче поддерживать в согласованном состоянии, так как и там и там используется один и тот же язык.
  • Один и тот же код можно совместно использовать и на клиенте, и на сервере.
  • Благодаря существованию модулей Node.js, которые, в сущности, представляют собой особым образом оформленные фрагменты кода, разработчики могут с удобством использовать в своих проектах чужой код, а так же собственные наработки.
  • Платформа Node.js, и, соответственно, основанные на ней фреймворки, отличаются нетребовательностью к ресурсам и масштабируемостью. Именно поэтому Node.js — это платформа, к которой часто прибегают те, кто пользуется микросервисными архитектурами.
  • Эта платформа хорошо подходит для разработки микросервисов ещё и из-за существования системы модулей Node.js, которые можно представить себе в виде строительных блоков серверных приложений.
  • В Node.js JavaScript код компилируется в машинный код, что позволяет получить гораздо более высокую производительность, чем при интерпретации кода. Сообщество JavaScript-разработчиков видит постоянное улучшение производительности Node.js за счёт того, что Google постоянно работает над совершенствованием V8.
  • Благодаря тому, что в Node.js имеется система ввода-вывода, не блокирующая главный поток, эта платформа демонстрирует высокую производительность. Достойная скорость обработки запросов достигается благодаря использованию JavaScript-механизмов конкурентного однопоточного выполнения кода.
  • Node.js — это опенсорсный проект, вокруг которого собралось огромное сообщество разработчиков. Это значит, что тот, кто столкнётся с какой-то проблемой, сможет достаточно быстро найти её решение.
  • Node.js, в ближайшем будущем, может стать платформой, которую будут использовать для проведения «тяжёлых» вычислений, наподобие тех, которые применяются для решения задач машинного обучения.

▍Компании, которые используют Node.js


  • Paypal
  • Netflix
  • LinkedIn
  • Uber
  • eBay
  • Yahoo

Если учесть сильные стороны Node.js и то, в каких компаниях используется эта платформа, становятся понятными причины её огромной популярности. Зарплата Node.js-разработчиков в США варьируется в пределах $40,000-$130,000 в год. В результате можно сказать, что если вы чувствуете, что Node.js и фреймворки, основанные на этой платформе, вам интересны, вы вполне можете выбрать именно их в качестве базы для своих разработок 2021 года.

Spring Boot

Проект Spring Boot — это фреймворк для разработки бэкенд-приложений, основанный на Java, который, как и Node.js, используется для разработки микросервисов. Этот фреймворк упрощает создание приложений, основанных на Spring, его можно представить себе в виде инструмента для создания самостоятельных Spring-приложений. Если вы планируете в 2021 году перейти на Spring, то вам, определённо, стоит знать о том, чем вам в этом деле сможет помочь Spring Boot.

▍Сильные стороны Spring Boot


  • Spring Boot позволяет с минимальными усилиями создавать самостоятельные Spring-приложения, облегчает процесс их конфигурирования, упрощает работу над ними. Подобные приложения легко запускаются с помощью команды java -jar.
  • Если в процессе создания Spring Boot-приложения произошла ошибка, встроенный анализатор ошибок поможет справиться с проблемой.
  • Spring Boot поддерживает встроенные серверы, вроде Tomcat и Jetty. Это значит, что тем, кто пользуется Spring Boot, не нужно развёртывать .war-файлы на внешних серверах.
  • Использование Spring Boot позволяет облегчить конфигурирование Maven за счёт наличия в системе начальных вариантов файла pom.xml.
  • В возможности фреймворка входит автоматическое конфигурирование Spring.
  • Spring Boot хорошо интегрируется с другими фреймворками.
  • Фреймворк предоставляет разработчику конфигурации, готовые для продакшн-использования. Сюда входят, например, метрики состояния проекта и внешние конфигурации.
  • При использовании Spring Boot нет нужды в применении XML-конфигураций или средств для генерирования кода.
  • Применение Spring Boot облегчает труд разработчиков за счёт применения принципа проектирования ПО, известного как «Convention over Configuration».

▍Компании, которые используют Spring


  • Platform
  • Intuit
  • MIT
  • Zillow
  • TransferWise

Честно говоря, я — не фанат Java. И я не будут использовать Spring Boot для серверной разработки в 2021 году. Но, если верить статистике, существует много программистов, применяющих этот фреймворк. Если говорить о зарплатах соответствующих специалистов, то это что-то около $50,000-$104,000 в год. Это немного меньше, чем зарплаты Node.js-разработчиков.

Django

Django — это опенсорсный бэкенд-фреймворк, написанный на Python. Как известно, Python — это один из таких языков, которые пользуются наибольшей любовью разработчиков. И это — одна из основных причин того, что Django является одним из самых популярных серверных фреймворков. Но у того, чтобы выбрать Django в качестве своего фреймворка 2021 года, есть и другие причины.

▍Сильные стороны Django


  • Django позволяет без особых сложностей создавать динамические веб-приложения с использованием Python. Данный фреймворк написан на Python. В этом заключается одно из главных достоинств Django.
  • Фреймворк поддерживает паттерн проектирования MVC. Это помогает разработчикам в разделении пользовательского интерфейса и бизнес-логики Django-приложений.
  • Это быстрый фреймворк, не перегруженный ненужными возможностями. Я имеют в виду то, что использование Django позволяет быстро выйти на работоспособный проект.
  • Django не относится к минималистичным фреймворкам, широко используемым для разработки микросервисов. Он отличается мощностью, универсальностью и определённым своеобразием.
  • Создатели этого фреймворка серьёзно относятся к безопасности. Поэтому они дают разработчикам, использующим Django, соответствующие инструменты. Я уверен, что все вы знаете о том, как много проблем существует в наши дни в сфере кибербезопасности. Поэтому чрезвычайно важными являются вопросы защиты веб-проектов. Django поддерживает систему аутентификации пользователей, содержит инструменты для защиты от различных атак. Среди них — средства защиты от SQL-инъекций, от межсайтового скриптинга, от межсайтовой подделки запросов, от кликджекинга.
  • Django-проекты отличаются компактностью кода.
  • Разработчики, использующие Django, могут моделировать базовые классы. Это значит, что в их распоряжении всегда имеется ORM.
  • Django — это кросс-платформенный проект. Он отлично работает на различных операционных системах. Кроме того, он поддерживает взаимодействие с различными базами данных.
  • Это — фреймворк, приложения, созданные с использованием которого, хорошо поддаются масштабированию. Поэтому тот, кто выбирает Django, может быть уверенным в том, что сможет эффективно развивать свой проект по мере его роста.
  • Вокруг Django сформировалось активное сообщество. Поэтому тот, кто столкнулся с какой-то проблемой, сможет без особых сложностей её решить.

▍Компании, которые используют Django


  • Mozilla
  • NASA
  • Pinterest
  • Bitbucket
  • Instagram

Так как Django основан на Python, о производительности этого фреймворка и о его поддержке можно не беспокоиться. Кроме того, если взглянуть на список компаний, использующих Django, можно сделать вывод о том, что это — фреймворк, достойный внимания и в этом, и в будущем году. Если проанализировать зарплаты Django-разработчиков, то окажется, что это что-то между $90,000-$120,000 в год. В результате оказывается, что спрос на Django-специалистов достаточно высок.

Экскурс в теорию: информация о JavaScript, сферах применения и особенностях языка

JavaScript (JS) — высокоуровневый язык программирования, который поддерживает императивный, функциональный, событийно-ориентированный и другие подходы. Относится к языкам с динамической типизацией, входит в группу интерпретируемых языков.

Справка: в разговорной речи специалисты употребляют названия «яваскрипт», «джейэс» и даже «жабаскрипт». Кстати, у нас есть мини-словарь профессионального сленга программистов.

В число основных особенностей JS входят:

  • Динамическая типизация — тип данных определяется в момент присваивания значения константе или переменной.
  • Интерпретируемый язык — код приложения интерпретируется при обращении, не требуется предварительная компиляция.
  • Функции как объекты первого класса, то есть функции в JavaScript можно возвращать из функций, передавать в качестве параметров в другие функции, присваивать переменным.
  • Поддержка прототипного и объектно-ориентированного подхода.
  • Универсальность — все популярные браузеры поддерживают JavaScript.

ES6, современная спецификация JavaScript, поддерживает синтаксис стрелочных функций, дестракчеринг, операторы spread и rest, модули и классы. Эти и другие инструменты делают JavaScript гибким и выразительным языком программирования.

Важная особенность JavaScript — развитая инфраструктура. Вокруг этого языка программирования сформировано многочисленное сообщество. Разработчикам доступны мощные инструменты, например:

  • Библиотеки и фреймворки для создания приложений (React, Vue).
  • Сборщики (Webpack, Gulp).
  • Вспомогательные библиотеки (Lodash, Underscore).
  • Генераторы статических сайтов (Gatsby.js, Next.js).

Сферы применения JavaScript

В первую очередь JavaScript широко используется во фронтенд-разработке. Этот язык вместе с HTML и CSS входит в базовый набор инструментов фронтендера. На JavaScript создаются приложения, которые исполняются в браузере на стороне клиента. Они обеспечивают интерактивность сайтов. Например, когда пользователь заполняет форму и нажимает кнопку «Подписаться», мгновенная реакция на это действие обычно обеспечивается кодом, написанным на JavaScript.

Сферы применения JavaScript не ограничиваются браузерами и веб-приложениями. С помощью этого языка решают такие задачи:

  • Разработка нативных приложений. Например, с помощью фреймворка React Native создаются приложения для Android и iOS.
  • Серверная разработка. Node.js применяется для бэкенд-разработки. Об этом направлении у нас есть отдельная статья.
  • Разработка десктопных приложений. JS применяется в офисных пакетах Microsoft и OpenOffice, в приложениях компании Adobe.
  • Программирование оборудования и бытовой техники, например, платёжных терминалов, телевизионных приставок.

В данной статье рассматривается перспектива изучения JavaScript для использования в разработке фронтенда.

На Хекслете изучить JavaScript и фронтенд-разработку можно в рамках профессии «Фронтенд-программист». Первые курсы в этой профессии, включая «Основы программирования», «JavaScript: настройка окружения», «Основы командной строки», «Системы контроля версий» и другие, доступны бесплатно.

Популярность, рейтинг и перспективы JavaScript

Как отмечалось выше, JavaScript входит в число самых популярных языков программирования. В июле 2020 года JS занимает седьмое место в индексе TIOBE, который составляется на основе статистики поисковых запросов. Этот язык популярнее, чем PHP, Swift, Ruby, Go.

JavaScript занял первое место по количеству пулреквестов на GitHub во втором квартале 2020 года. Эти данные расчитывает ресурс GitHut.

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

О перспективах JavaScript подробно рассказывают эксперты в комментариях ниже. Стоит обратить внимание на два момента.

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

Второй момент: в настоящий момент растет популярность прогрессивных веб-приложений (PWA, progressive web apps). Эту технологию активно продвигает Google. Прогрессивные веб-приложения представляют собой гибрид сайта и мобильного приложения. В среднесрочной перспективе у PWA есть хорошие шансы отвоевать значительную долю рынка у нативных приложений.

Для разработки PWA применяется JavaScript. Например, сайты, созданные с помощью генератора Gatsby.js, поддерживают функциональность прогрессивного веб-приложения из коробки. Это ещё один плюс в пользу востребованности JS в ближайшей перспективе.

Сколько платят фронтендерам, или О зарплатах JavaScript-программистов

Заработок JavaScript-программиста зависит от уровня квалификации, региона проживания и работы, режима трудоустройства.

По данным карьерного сайта Trud на апрель 2021 года, средняя зарплата JavaScript-разработчика в России составляет 90 000 рублей. В мае 2020 года этот показатель составлял 114 000 рублей, а весной 2019 года — 94 000 рублей. Больше всего вакансий на этом ресурсе с предложением зарплаты в диапазоне от 46 000 до 60 000 рублей (см. иллюстрацию). При этом данные сервиса Trud отражают средние зарплаты JavaScript-разработчиков в России, практически не затрагивая Москву и Петербург. В Москве средняя зарплата JavaScript-разработчика весной 2021 года составляет 110 000 рублей.

зарплаты фронтендеров

По данным агентства NewHR, вилка зарплат фронтенд-разработчиков уровня middle в 2020 составляла от 170 000 до 220 000 рублей. По информации карьерного сайта «Мой круг», медианная зарплата JS-разработчиков во втором полугодии 2020 года — 115 000 ₽ (+8,5% по сравнению с первым полугодием).

На сайте hh.ru по состоянию на весну 2021 года есть почти 15 000 вакансий для JavaScript-разработчиков в России. Уровень зарплаты варьируется от 20 000 до 380 000 рублей.

Информацию по своему региону можно получить самостоятельно с помощью сайтов поиска работы.

Перспективы JavaScript: взгляд экспертов

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

Сергей Рубанов: спрос на рынке труда JavaScript-разработчиков сильно превышает предложение

Сергей Рубанов


По вашему опыту, почему стоит изучать JS?

Несмотря на то, что JS имеет свои странности, он невероятно прост для изучения и терпим к ошибкам. Экосистема языка хорошо развита, так что если вы чувствуете в себе силы, то сможете легко настроить более строгие правила для написания кода, используя различные инструменты, позволяющие избегать популярных ошибок или даже добавить статическую типизацию. В данный момент JavaScript — единственный высокоуровневый динамический язык, доступный практически везде, в том числе (и в первую очередь) на веб-страницах. Это позволяет выучить один язык, частично переиспользовать готовые наработки для клиента, сервера, в роботостроении, для интернета вещей, даже для машинного обучения. А ещё у JavaScript огромное, невероятно классное и самое открытое комьюнити.

Какие перспективы у этого языка программирования по сравнению с другими языками?

JavaScript — один из самых распространенных языков в мире. В индексе TIOBE в данный момент он занимает 7 место, а по количеству репозиториев на GitHub и популярности по результатам опроса Stack Overflow он находится на первом месте и является вторым желаемым языком после Python. Пакетный менеджер npm является самым крупным пакетным менеджером из всех существующих. Все это говорит о том, что перспективы у языка великолепные.

Будет ли он востребован в будущем?

Только недавно стали появляться технологии, которые в чём-то смогут заменить JavaScript в браузерах, но понадобится ещё очень долгое время, прежде чем эти технологии достигнут достаточного уровня развития и научатся всему тому, что может JavaScript. К тому же на сервере и во встраиваемых системах у JavaScript есть много альтернатив, но и там он имеет свою нишу. Многие компании вкладывали и вкладывают огромные деньги в развитие движков, в которых JavaScript исполняется, что позволяет делать язык всё эффективнее и не терять своей актуальности.

Каковы перспективы JS-разработчика на рынке труда?

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

Почему новичку стоит обратить внимание на этот язык?

  • количество информации, которую можно найти в интернете;

  • развитая экосистема в виде огромнейшего количества библиотек и инструментов для разработки;

  • очень хорошее комьюнити;

  • одного языка достаточно, чтобы писать веб приложения, мобильные приложения, серверы и многое другое;

  • высокий спрос на рынке труда;

Сергей Рубанов, опытный разработчик и лидер сообществ. Приглашённый эксперт TC39 (комитет, который занимается разработкой языка JavaScript), участник WebAssembly Community Group, член команды Babel, соорганизатор BeerJS Moscow, WebAssembly Moscow, ведущий канала Juliarderity (совместно с Романом Дворновым).

Павел Черторогов: эх, а ведь были времена, когда разработчики стеснялись говорить, что они пишут на JavaScript. Сейчас всё не так

Павел Черторогов


По вашему опыту, почему стоит изучать JS?

JavaScript в последние годы стал набирать безумные обороты.

На это была простая причина: клиенты стали более требовательными к скорости работы и отзывчивости интерфейсов. Поставив лайк, посетители хотят сразу видеть +1, а не ждать полсекунды, пока сервер ответит. Нажал кнопку, моментально получил реакцию. И это можно сделать, если избавиться от сетевых задержек между сервером и клиентом — перенести исполняемый код, который дает результат максимально близко к клиенту, то есть в его браузер.

А в браузерах обосновался старичок JavaScript. Причем если лет 5-10 назад было стыдно говорить, что ты программируешь на JavaScript, так как его было сложно считать удобным и производительным языком, то после выхода ES6 удобство резко возросло и продолжает расти благодаря работе комитета TC39 (куда входят куча спецов из больших компаний), который развивает синтаксис языка.

Производительность языка постоянно увеличивается. Но благодаря большому комьюнити, интересу больших интернет гигантов к языку, неуклонно растет количество инструментария, которые сильно облегчает разработку. Например, ESlint (проверка стиля кода), Prettier — автоформатирование кода, Babel — для транспилинга кода и напиcания всяких AST-трансформеров, JIT-компиляторов.

Но что не может не радовать, так это TypeScript, который позволяет писать статически типизированный код (Flowtype проиграл для меня войну). Статическая типизация позволяет писать более стабильный и качественный код, дает плюшки автоподстановки в IDE. В общем, корпоративный сектор все больше задач может доверить миру JavaScript. Современный джаваскрипт с классами, декораторами, интерфейсами, типизацией все больше и больше становится похожим на Java в хорошем смысле этого слова. А если учесть, что JavaScript сейчас работает как на клиенте (в браузере), так и на сервере (NodeJS), то это это для бизнеса открывает возможность писать изоморфные приложения.

Будет ли этот язык востребован в будущем?

За пару лет популярность JS должна будет только расти. Ведь столько еще чудовищных интерфейсов вокруг, столько мертвых страниц, сгенерированных сервером. JS будет теснить PHP и Ruby.

Так или иначе JavaScript еще будет востребован как минимум лет 10, дальше прогнозировать сложно.

Что угрожает JavaScript/TypeScript:

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

  • Страшнее всего для JS-разработчика смена способа потребления контента. Допустим, мы откажемся от браузеров, перейдем на голосовых помощников, или нам вставят электрод в голову, или приклеят хитрую линзу на роговицу. Тут может оказаться, что JS будет не тем языком, который будет использоваться в этих каналах передачи информации. Хотя, поживем — увидим.

В любом случаем надо постоянно учиться и развиваться, чтоб соответствовать текущему времени. Но, к бабке не ходи, лет через 10 надо точно будет чему-то сильно переучиваться.

Каковы перспективы разработчика JS на рынке труда?

Сейчас есть некий перекос в сторону фронтенд-разработчиков, которые производят wow-эффект на клиентов. К примеру, на Украине сейчас активно ищутся React/Vue/Angular разработчики. И нередко зарплата таких фронтенд-специалистов с опытом 1-2 года по зарплате соизмерима со среднестатистическим Java-бэкендером с опытом 6-8 лет. Нужны легкие деньги после универа?! Вперед в JS!

Почему новичку стоит обратить внимание на JS?

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

Павел Черторогов, архитектор информационных систем, GraphQL-гуру.

Роман Дворнов: JavaScript вряд ли куда-либо денется в ближайшие годы

Роман Дворнов


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

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

Кстати, о новом. JavaScript — один из немногих языков с таким немалым возрастом (был создан в декабре 1995-го), который настолько динамично развивается сегодня. Формально все началось в 2015 году, когда вышла новая редакция ES2015 (или ES6) и было решено выпускать новую редакцию каждый год, хотя на самом деле всё началось задолго до этого. Не каждый год случаются значительные изменения, но изменения происходят и чувствуется темп. Можно следить за работой TC39 (комитет работающий над спецификацией языка), участвовать в обсуждениях предложений, вносить свои предложения и так далее – процесс открыт, и это здорово. К тому же, сегодня имплементаторы внедряют новые фичи накануне принятия новой редакции спецификации языка, а не несколько лет спустя, как это было раньше.

Низкий порог входа всегда был предметом споров: с одной стороны, вовлекается больше людей, с другой — их уровень как специалистов невысок. Это, плюс часто неглубокое изучение, обычно и создает негативное отношение к языку. Чтобы использовать JavaScript эффективно, его нужно изучать полностью, и дополнительно множество смежных областей, а особенно Computer Science, как это делают в случае с другими языками. Все больше задач с применением JavaScript не уступают по сложности задачам решаемым с другими языками.

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

Во-вторых, необходимость шарить логику между клиентом и сервером, Server Side Rendering и прочее, укрепляет позиции JavaScript на серверной стороне. В-третьих, тулинг для JavaScript, как и для клиентского веб-стека, по большей части написан на JavaScript.

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

Роман Дворнов, эксперт в области фронтенд-разработки, ведущий канала Juliarderity (совместно с Сергеем Рубановым). Профиль на GitHub.

Андрей Оконечников: будем ли мы писать JS через несколько лет — неизвестно, но 99% что мы будем продолжать компилировать в JS

Андрей Оконечников


По вашему опыту, почему стоит изучать JS? Какие перспективы у этого языка программирования по сравнению с другими языками?

Несмотря на интересные альтернативы, такие как ReasonML, Kotlin и уже существующие языки, которые компилируются в JS, такие как ClojureScript и Elm, это никак особенно не влияет на всё растущую популярность JS. Причина для того, на мой взгляд, в низком пороге входа и огромной экосистеме (npm). На JS написано несколько миллионов опенсорс модулей, которые можно установить за считанные секунды. Плюс возможность открыть консоль разработчика в браузере и начать писать код.

Развитие распределенных сред разработки, которые работают напрямую из браузера, например CodeSandbox, ещё более уменьшают порог входа для новичков. Инструменты разработки становятся лучше и лучше, позволяя использовать JS в больших командах.

Одновременно с этим, растущая производительность JS runtimes, например V8, делает использование этого языка все более приемлемым на платформах вне веб-браузеров.

Благодаря инициативам ECMA этот язык также очень быстро развивается, получая все более современные фичи.

Уже сейчас JavaScript — один из самых популярных языков программирования в мире. И со временем он только будет набирать популярность благодаря выходу на новые платформы, такие как IoT и так далее.

Будет ли JS востребован в будущем?

JavaScript никуда не денется в ближайшее время, хотим мы того или нет. На этом языке уже сейчас написано огромное количество кода, и количество это будет только увеличиваться. И даже если появится более современный язык, веб-браузеры будут вынуждены поддерживать JS. Так устроен web — вечная совместимость. Будем ли мы писать JS через несколько лет — неизвестно, но 99% что мы будем продолжать компилировать в JS.

Каковы перспективы разработчика JS на рынке труда? Почему новичку стоит обратить внимание на JS?

Сейчас перспективы как никогда хорошие. Особенно связанные с фронтендом. Веб превращается в платформу для по-настоящему сложных приложений, и рынок просто не способен удовлетворить потребность компаний. Но JS не единственный фактор. Умение писать CSS и доступный HTML важны сегодня как никогда. Рынок JS разработчиков наполняется в основном из backend-разработчиков, переквалифицирующихся во frontend. Если вы видите себя во frontend, я бы очень рекомендовал обратить внимание на основы дизайна, user experience, HTML + CSS и, конечно же, JavaScript.

Если вы дизайнер и уже умеете писать разметку и CSS, я бы так же советовал начать изучать JavaScript. В будущем граница между JS и CSS-программистами будет исчезать, так как очень сложно сделать хороший user experience в Web без использования обоих языков.

Андрей Оконечников, фронтенд-разработчик и UI-дизайнер родом из Ярославля, живущий в Вене, Австрия. Более 10 лет он придумывает и разрабатывает пользовательские интерфейсы, используя современные веб-технологии. До этого он работал дизайнером веб-сайтов и пользовательских интерфейсов. Комбинация опыта дизайнера и разработчика помогает ему лучше понимать проблемы пользователей и находить оригинальные решения в пользовательских интерфейсах.

Андрей работал с такими компаниями, как Yandex, JetBrains, Feedly, Netlify и многими другими. Он основатель консалтинг-компании component-driven.io, специализирующейся на дизайн системах и сложных веб-интерфейсах, и создатель macOS приложения цветовой пипетки для разработчиков и дизайнеров ColorSnapper.

Александр Казаченко: на одного подходящего кандидата приходится 10 или более неподходящих, это печалит

Александр Казаченко


По вашему опыту, почему стоит изучать JS?

Когда пользователи включают компьютер, смартфон или планшет, они первым делом запускают браузер. В основном именно в браузере люди развлекаются, работают и учатся.

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

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

И на сервере JS тоже имеет свою нишу в виде Node.js.

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

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

Сейчас существует множество языков, транспилирующихся в JS (TypeScript, CoffeeScript, Kotlin и так далее), много фреймворков и библиотек разного уровня абстрактности, что позволяет разрабатывать на JS так, как нравится именно вам.

Какие перспективы у самого языка программирования в сравнении с другими? Будет ли он востребован в будущем?

Как я отмечал выше, у JS очень большой рынок, где он востребован и где ему нет аналогов (веб-браузер).

Соответственно, можно считать, что в ближайшие лет 10 JS не только не умрет, но и будет активно развиваться.

На какое направление при изучении JS обратить больше внимания — frontend или backend?

Изначально JS применялся сугубо для frontend'а, соответственно и развился он больше в эту сторону. Но это не имеет никакого значения, при выборе направления — frontend или backend. Более значимым в этом выборе будет то, чем интересно заниматься именно вам. Так как язык один и тот же, разница только в окружении.

Какие перспективы у JS-разработчика в работе? Почему новичку стоит обратить внимание на этот язык программирования?

Мне кажется, сейчас у многих на слуху выражение «вкатиться во фронтенд», и это неспроста. Порог вхождения в рынок разработки фронта для обычных веб-сайтов очень низкий, и можно, потратив пару месяцев на обучение, начать на этом зарабатывать.

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

За последние 3 года я прособеседовал не менее 200 человек, и на одного подходящего кандидата приходится 10 или более неподходящих, это печалит.

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

Александр Казаченко, архитектор, Tinkoff.ru.

Что такое Node.js? История создания и развития

На самом деле Node.js — это не фреймворк или библиотека, а среда выполнения, которая базируется на движке Chrome V8 JavaScript.

Технология была впервые представлена в 2009 году Райаном Далем на ежегодном европейском форуме JSConf и сразу же была признана самой значимой частью программного обеспечения в современной вселенной JavaScript.

Как проект с открытым исходным кодом Node.js спонсировался Joyent — крупным поставщиком решений для облачных вычислений и хостинга. Ранее компания уже инвестировала в ряд других технологий, таких как инфраструктура Ruby on Rails, а также предоставляла услуги хостинга для таких гигантов, как Twitter и LinkedIn. Последний также стал одним из первых сервисов, использовавших Node.js для программирования бэкэнда своего мобильного приложения. Позже технология была принята рядом технологических лидеров, таких как Uber, eBay, Walmart и Netflix. И этот список можно продолжать до бесконечности.

Сильные и слабые стороны Node.js остаются предметом жарких дискуссий. Чтобы внести ясность, стоит проанализировать как плюсы, так и минусы этой среды.

Преимущества использования Node.js

Согласно данным Google Trends, интерес к этому ответвлению JS достиг пика в 2017 году и остаётся высоким. И на то есть веские причины.

Надёжная технология на базе JavaScript

Используя Node.js в качестве основы для бэкэнда, вы автоматически получаете все преимущества полнофункциональной разработки на JavaScript, в числе которых:

  • оптимальная скорость работы приложений;

  • возможность совместного и повторного использования;

  • огромное количество бесплатных инструментов;

  • кроссплатформенность.

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

Быстрая обработка запросов и эффективная событийная модель

Node.js работает быстро. Это доказывают результаты тестов производительности, представленные toptal.com. Исследователи сравнили, как популярные языки, такие как GO, PHP, Java и Node.js, обрабатывают одновременные запросы.

Последний демонстрирует лучшие результаты практически по всем показателям благодаря использованию движка V8. Изначально он был разработан для браузера Chrome. Написанный на C++, Chrome V8 используется для компиляции функций, написанных на JS, в машинный код, и выполняет эту работу с впечатляющей скоростью. Благодаря тому, что Google вкладывает большие средства в свой движок, V8 на протяжении многих лет демонстрировал рост производительности, а Node.js извлёк из этого все возможные преимущества.

Ещё одним немаловажным преимуществом является асинхронная обработка запросов. В контексте серверной части синхронная обработка предполагает, что код выполняется последовательно. Таким образом, каждый новый запрос блокирует поток остальных, а другие команды начнут выполняться только после того, как будет выполнена предыдущая. В свою очередь, асинхронный метод, который используется в Node.js, максимально используя однопоточную обработку, что сокращает время отклика в несколько раз.

Третий аспект — это событийная модель. При использовании одного языка как на стороне клиента, так и в бэкенде, синхронизация происходит максимально быстро, что особенно полезно для приложений реального времени, основанных на событиях. Благодаря своей асинхронной однопоточной природе Node.js идеально подходит для онлайн-игр, чатов, видеоконференций или любых других проектов, требующих постоянного обновления данных.

Примеры говорят сами за себя: многие ведущие компании после перехода на Node.js заметили значительные улучшения — PayPal, например, сообщил о снижении времени отклика на 35% после миграции с Java.

Идеальный выбор для микросервисной архитектуры

Будучи простой и лёгкой средой программирования, Node.js стал идеальным решением для так называемой архитектуры микросервисов. Этот подход предполагает разработку одного приложения как набора небольших сервисов, каждый из которых работает с собственными процессами и взаимодействует с легковесными механизмами, часто с API ресурсов HTTP.

Согласно отчёту Node.js User Survey Report 2017, Node.js является предпочтительной технологией при создании решений на базе подобных экосистем. Около половины респондентов используют технологии, связанные с микросервисами (если точнее, то речь идёт о Docker — ведущей платформе для контейнеризации программного обеспечения).

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

В качестве примера реализации можно рассмотреть переход Walmart к микросервисной архитектуре на базе Node.js. Такое решение позволило компании получить немало преимуществ:

  • За ночь рост конверсии на 20% в целом и рост конверсии с мобильных устройств на 98%.

  • 100% время безотказной работы в Чёрную пятницу (более 500 млн просмотров страниц).

  • Экономия до 40% на оборудовании.

Ещё один яркий пример того, как Node.js может превзойти конкурентов с точки зрения производительности, — это GoDaddy. Запустив рекламную кампанию SuperBowl, компания смогла обработать 10 000 запросов в секунду без простоев, используя только 10% возможностей оборудования.

Богатая экосистема

NPM — менеджер пакетов Node.js по умолчанию — также служит основной платформой для инструментов JavaScript с открытым исходным кодом, которые играют важную роль в развитии этого языка программирования. С учётом того, что на данный момент в реестре npm доступно около миллиона библиотек и еженедельно публикуется более 10 000 новых, экосистема Node.js довольно богата. Согласно данным статистики, 97% современных веб-приложений состоят из модулей npm. И это доказательство его неоспоримой популярности среди разработчиков.

С таким огромным разнообразием бесплатных инструментов, доступных в несколько кликов, существует огромный потенциал для использования Node.js. В то же время ПО с открытым исходным кодом пользуется всё большей популярностью, поскольку оно позволяет создавать новые решения, сокращая общие затраты на разработку и сроки выхода на рынок.

Поддержка IT-гигантов

Как упоминалось выше, разработку Node.js поддержала Joyent. В 2015 году был создан фонд, призванный обеспечить широкое распространение и ускорить развитие этой среды. IBM, Microsoft, PayPal, Fidelity и SAP стали членами-основателями этой организации.

Список компаний, использующих Node.js, постоянно растёт. В настоящее время в него входят более 300 известных компаний, таких как PayPal, Medium, Trello, Uber, Zendesk и множество других.

Очень немногие проекты с открытым исходным кодом когда-либо пользовались такой сильной поддержкой со стороны ведущих мировых корпораций. И это говорит о выдающемся потенциале Node.js.

Полная поддержка JSON

Хотя другие серверные технологии, такие как PHP и Ruby on Rails, могут использовать JSON для связи, Node.js делает это без преобразования между двоичными моделями посредством JavaScript. Это особенно удобно, когда вам нужно создать RESTful API для поддержки базы данных NoSQL. Эта «бесшовная» связь с одним из основных стандартов передачи данных — ещё одно преимущество экосистемы JavaScript.

Ложка дёгтя: почему Node.js может вам не подойти

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

Низкая производительность при работе с тяжёлыми вычислительными задачами

Самым большим недостатком Node.js даже сейчас является его неспособность обрабатывать тяжёлые задачи, связанные с процессором. Но, чтобы понять, каковы корни этой проблемы, необходимо немного углубиться в теорию.

Как известно, Node.js - это среда выполнения, которая выполняет JavaScript на стороне сервера. Будучи языком программирования внешнего интерфейса, JS использует один поток для быстрой обработки задач. Для его работы не требуется многопоточность, потому что задачи в JavaScript легковесны не потребляют большое количество ресурсов процессора.

Неблокирующая модель ввода и вывода означает, что Node.js отвечает на вызов клиента, чтобы начать выполнять запрос, и обрабатывает задачу во время выполнения обратного вызова. То есть, Node асинхронно выполняет JS-код в своём единственном потоке на основе событий. Это называется циклом событий.

Проблема возникает, когда Node.js получает задачу, привязанную к ЦП: всякий раз, когда в цикл событий приходит тяжёлый запрос, Node.js направляет все доступные ресурсы ЦП для его первой обработки, а затем отвечает на другие запросы в очереди. Это приводит к общей задержке в цикле событий, поэтому Node.js не рекомендуется для тяжёлых вычислений.

В 2018 году многопоточность была представлена в качестве экспериментальной функции Node.js версии 10.5.0. Так называемый модуль рабочих потоков может задействовать дополнительные потоки, но только на процессорах с несколькими ядрами. Хотя за последние несколько лет эта функция значительно усовершенствовалась, в обработке тяжёлых задач решение по-прежнему уступает альтернативам.

Зависимость от обратного вызова

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

Незрелость

Хотя основные модули Node.js довольно стабильны и могут считаться зрелыми, в реестре npm есть много инструментов, которые либо имеют низкое качество, либо не имеют чёткой документации и не были протестированы должным образом. Более того, сам реестр недостаточно хорошо структурирован, чтобы предлагать инструменты на основе их рейтинга или качества. Следовательно, может быть трудно найти лучшее решение для ваших целей, не зная, что искать.

Вступление

Итак начнём с футболки. Своё решение нужно было написать до первого сентября, а я дописал только шестого.

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

Во время своей предыдущей статьи я сравнивал библиотеки на php для создания вебсокет-сервера тогда мне порекомендовали библиотеку swoole — она написана на C++ и устанавливается из pecl. К слову сказать, все эти библиотеки могут использоваться не только для создания вебсокет сервера, но подходят и просто для http-сервера. Этим я и решил воспользоваться.

Я взял библиотеку swoole, создал базу данных sqlite в памяти и сразу поднялся в первую двадцатку с результатом 159 секунд, потом меня сместили, я добавил кеш и уменьшил время до 79 секунд, попал назад в двадцатку, меня сместили, переписал с sqlite на swoole_table и уменьшил время до 47 секунд. Конечно до первых мест мне было далеко, но мне удалось обойти в таблице моих нескольких знакомых с решением на Go.

Так выглядит старая рейтинговая таблица сейчас:

Немного похвалы для Mail.Ru и можно идти дальше.

Благодаря этому замечательному чемпионату я более близко познакомился с библиотеками swoole, workerman, научился лучше оптимизировать php под высокие нагрузки, научился использовать yandex tank и многое другое. Продолжайте устраивать такие чемпионаты, соревновательность подстёгивает к изучению новой информации и прокачке навыков.

php vs node.js vs go

Для начала я взял swoole, потому что он написан C++ и однозначно должен работать быстрее workerman, который написан на php.

Я написал hello world код:

$server = new Swoole\Http\Server('0.0.0.0', 1080);
$server->set(['worker_num' => 1,]);
$server->on('Request', function($req, $res) {$res->end('hello world');});
$server->start();

Запустил линуксовую консольную утилиту Apache Benchmark, которая делает 10к запросов в 10 потоков:

ab -c 10 -n 10000 http://127.0.0.1:1080/

и получил время ответа 0.17 ms

После этого написал пример на workerman:

require_once DIR . '/vendor/autoload.php';
use Workerman\Worker;
$http_worker = new Worker("http://0.0.0.0:1080");
$http_worker->count = 1;
$http_worker->onMessage = function($conn, $data) {$conn->send("hello world");};
Worker::runAll();

и получил 0.43 ms, т.е. результат в 3 раза хуже.
Но я не сдавался, установил библиотеку event:

pecl install event

добавил в код:

Worker::$eventLoopClass = '\Workerman\Events\Ev';

Итоговый код

require_once DIR . '/vendor/autoload.php';
use Workerman\Worker;
Worker::$eventLoopClass = '\Workerman\Events\Ev';
$http_worker = new Worker("http://0.0.0.0:1080");
$http_worker->count = 1;
$http_worker->onMessage = function($conn, $data) {$conn->send("hello world");};
Worker::runAll();

Измерения показали 0.11 ms, т.е. workerman написанный на php и использующий libevent стал работать быстрее чем swoole написанный на C++. Я с помощью гуглтранслейта прочитал тонны документации на китайском. Но ничего не нашёл. К слову сказать обе библиотеки написаны китайцами и комментарии на китайском в коде библиотек для них — …

Теперь я понимаю, что чувствовали китайцы, когда читали мой код.

Я завёл тикет на гитхабе swoole с вопросом как такое может происходить.

Там мне порекомендовали использовать:

$serv = new Swoole\Http\Server('0.0.0.0', 1080, SWOOLE_BASE);

вместо:

$serv = new Swoole\Http\Server('0.0.0.0', 1080);

Итоговый код

$serv = new Swoole\Http\Server('0.0.0.0', 1080, SWOOLE_BASE);
$serv->set(['worker_num' => 1,]);
$serv->on('Request', function($req, $res) {$res->end('hello world');});
$serv->start();

Я воспользовался их советом и получил 0.10 ms, т.е. чуть-чуть быстрее чем workerman.

На этот момент у меня уже было готовое приложение на php, которое я уже не знал как оптимизировать, оно отвечало за 0.12 ms и решил переписать приложение на что-нибудь другое.

Попробовал node.js:

const http = require('http');
const server = http.createServer(function(req, res) {
    res.writeHead(200);
    res.end('hello world');
});
server.listen(1080);

получил 0.15 ms, т.е. на 0.03 ms меньше чем моё готовое приложение на php

Взял fasthttp на go и получил 0.08 ms:

Hello world на fasthttp

package main

import (
	"flag"
	"fmt"
	"log"

	"github.com/valyala/fasthttp"
)

var (
	addr     = flag.String("addr", ":1080", "TCP address to listen to")
	compress = flag.Bool("compress", false, "Whether to enable transparent response compression")
)

func main() {
	flag.Parse()

	h := requestHandler
	if *compress {
		h = fasthttp.CompressHandler(h)
	}

	if err := fasthttp.ListenAndServe(*addr, h); err != nil {
		log.Fatalf("Error in ListenAndServe: %s", err)
	}
}

func requestHandler(ctx *fasthttp.RequestCtx) {
	fmt.Fprintf(ctx, "Hello, world!")
}

Итоговая таблица (таблица и все тесты на опубликованы на гитхабе):

splfixedarray vs array

За неделю до окончания конкурса условия немного усложнили:

  • объём данных увеличили в 10 раз
  • количество запросов в секунду увеличили в 10 раз

Структура данных, которые нужно хранить — это 3 таблицы: users (1kk), locations (1kk) и visits (11kk).

Описание полей

User (Профиль):
id — уникальный внешний идентификатор пользователя. Устанавливается тестирующей системой и используется для проверки ответов сервера. 32-разрядное целое беззнаковое число.
email — адрес электронной почты пользователя. Тип — unicode-строка длиной до 100 символов. Уникальное поле.
first_name и last_name — имя и фамилия соответственно. Тип — unicode-строки длиной до 50 символов.
gender — unicode-строка m означает мужской пол, а f — женский.
birth_date — дата рождения, записанная как число секунд от начала UNIX-эпохи по UTC (другими словами — это timestamp).

Location (Достопримечательность):
id — уникальный внешний id достопримечательности. Устанавливается тестирующей системой. 32-разрядное целое беззнаковоее число.
place — описание достопримечательности. Текстовое поле неограниченной длины.
country — название страны расположения. unicode-строка длиной до 50 символов.
city — название города расположения. unicode-строка длиной до 50 символов.
distance — расстояние от города по прямой в километрах. 32-разрядное целое беззнаковое число.

Visit (Посещение):
id — уникальный внешний id посещения. 32-разрядное целое беззнакое число.
location — id достопримечательности. 32-разрядное целое беззнаковое число.
user — id путешественника. 32-разрядное целое беззнаковое число.
visited_at — дата посещения, timestamp.
mark — оценка посещения от 0 до 5 включительно. Целое число.

Моё решение перестало укладываться в выделенные для него 4Гб. Пришлось искать варианты.
Для начала мне нужно было залить в память из json-файлов 11 миллионов записей.

Попробовал swoole_table, замерил потребление памяти — 2200 Мб

Код загрузки данных

$visits = new swoole_table(11000000);
$visits->column('id', swoole_table::TYPE_INT);
$visits->column('user', swoole_table::TYPE_INT);
$visits->column('location', swoole_table::TYPE_INT);
$visits->column('mark', swoole_table::TYPE_INT);
$visits->column('visited_at', swoole_table::TYPE_INT);
$visits->create();

$i = 1;
while ($visitsData = @file_get_contents("data/visits_$i.json")) {
    $visitsData = json_decode($visitsData, true);
    foreach ($visitsData['visits'] as $k => $row) {
        $visits->set($row['id'], $row);
    }
    $i++;
}
unset($visitsData);

gc_collect_cycles();

echo 'memory: ' . intval(memory_get_usage() / 1000000) . "\n";

Попробовал ассоциативный массив, потребление памяти сильно больше — 6057 Мб

Код загрузки данных

$visits = [];

$i = 1;
while ($visitsData = @file_get_contents("data/visits_$i.json")) {
    $visitsData = json_decode($visitsData, true);
    foreach ($visitsData['visits'] as $k => $row) {
        $visits[$row['id']] = $row;
    }
    $i++;echo "$i\n";
}
unset($visitsData);

gc_collect_cycles();

echo 'memory: ' . intval(memory_get_usage() / 1000000) . "\n";

Попробовал SplFixedArray, потребление памяти немого меньше, чем у обычного массива — 5696 Мб

Код загрузки данных

$visits = new SplFixedArray(11000000);

$i = 1;
while ($visitsData = @file_get_contents("data/visits_$i.json")) {
    $visitsData = json_decode($visitsData, true);
    foreach ($visitsData['visits'] as $k => $row) {
        $visits[$row['id']] = $row;
    }
    $i++;echo "$i\n";
}
unset($visitsData);

gc_collect_cycles();

echo 'memory: ' . intval(memory_get_usage() / 1000000) . "\n";

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

$visits[1] = ['user' => 153, 'location' => 17, 'mark' => 5, 'visited_at' => 1503695452];

на такой:

$visits_user[1] = 153; 
$visits_location[1] = 17; 
$visits_mark[1] = 5; 
$visits_visited_at[1] => 1503695452;

потребление памяти при разбивке трёхмерного массива на двумерные составило — 2147 Мб, т.е. в 3 раза меньше. Т.о. имена ключей в трёхмерном массиве съедали 2/3 от всей занимаемой им памяти.

Код загрузки данных

$user = $location = $mark = $visited_at = [];

$i = 1;
while ($visitsData = @file_get_contents("data/visits_$i.json")) {
    $visitsData = json_decode($visitsData, true);
    foreach ($visitsData['visits'] as $k => $row) {
        $user[$row['id']] = $row['user'];
        $location[$row['id']] = $row['location'];
        $mark[$row['id']] = $row['mark'];
        $visited_at[$row['id']] = $row['visited_at'];
    }
    $i++;echo "$i\n";
}
unset($visitsData);

gc_collect_cycles();

echo 'memory: ' . intval(memory_get_usage() / 1000000) . "\n";

Решил использовать разбиение трёхмерного массива совместно с SplFixedArray и потребление памяти упало ещё в 3 раза составив 704 МБ

Код загрузки данных

$user = new SplFixedArray(11000000);
$location = new SplFixedArray(11000000);
$mark = new SplFixedArray(11000000);
$visited_at = new SplFixedArray(11000000);

$user_visits = [];
$location_visits = [];

$i = 1;
while ($visitsData = @file_get_contents("data/visits_$i.json")) {
    $visitsData = json_decode($visitsData, true);
    foreach ($visitsData['visits'] as $k => $row) {
        $user[$row['id']] = $row['user'];
        $location[$row['id']] = $row['location'];
        $mark[$row['id']] = $row['mark'];
        $visited_at[$row['id']] = $row['visited_at'];

        if (isset($user_visits[$row['user']])) {
            $user_visits[$row['user']][] = $row['id'];
        } else {
            $user_visits[$row['user']] = [$row['id']];
        }

        if (isset($location_visits[$row['location']])) {
            $location_visits[$row['location']][] = $row['id'];
        } else {
            $location_visits[$row['location']] = [$row['id']];
        }
    }
    $i++;echo "$i\n";
}
unset($visitsData);

gc_collect_cycles();

echo 'memory: ' . intval(memory_get_usage() / 1000000) . "\n";

Ради интереса попробовал тоже самое на node.js и получил 780 Мб

Код загрузки данных

const fs = require('fs');

global.visits = []; global.users_visits = []; global.locations_visits = [];

let i = 1; let visitsData;

while (fs.existsSync(`data/visits_${i}.json`) && (visitsData = JSON.parse(fs.readFileSync(`data/visits_${i}.json`, 'utf8')))) {
    for (y = 0; y 

Итоговая таблица (таблица и все тесты опубликованы на гитхабе):

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