Ява везде. Язык, созданный более 25 лет назад для бытовой техники, стал одним из самых популярных языков программирования в корпоративных системах благодаря простому для понимания синтаксису, кроссплатформенности и объектно-ориентированному стилю.

Конечно, за 25 лет многое изменилось. Большой успех Java среди крупных корпораций поставил Oracle (нынешний владелец Java) в затруднительное положение. В Java давно не было новых инновационных изменений, и бизнес-клиенты рассчитывают на максимально стабильную и долгосрочную поддержку своих систем.

Можно даже сказать, что Java частично стагнирует. В то же время более инновационные и динамические языки программирования прошли долгий путь и не уступают по возможностям Java. Представляем — JavaScript.

JavaScript — от нуля до героя

Хотя Java и JavaScript похожи по названию, они не связаны. JavaScript появился еще во времена Netscape с целью сделать веб-сайты более динамичными. Вам больше не нужно было обновлять страницу, чтобы увидеть изменения; все это происходило на глазах пользователя.

JavaScript начал набирать обороты, не слишком углубляясь в историю, когда Netscape пожертвовал JavaScript в фонд ECMA Foundation, чтобы позволить различным поставщикам браузеров реализовать его и предложить своим пользователям. Примерно в это же время появилась стандартизированная основа JavaScript, ECMAScript.

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

Серверная часть Java и NodeJS

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

Простой в освоении синтаксис

Java имеет простой для понимания синтаксис, который облегчает изучение. Во многих дизайнерских решениях javaScript основан на Java, поэтому синтаксически много общего.

В дополнение к официальной документации существует множество ресурсов сообщества и статей по JavaScript. У вас не возникнет проблем с изучением JavaScript :)

Java:

public class ArrayUtil { public static String[] sortByLength(String[] items) { Arrays.sort(items, (a, b) -> a.length() - b.length()); // Comparator.comparingInt(String::length) return items; } }

JavaScript:

export function sortByLength(items: string[]) { return items.sort((a, b) => a.length - b.length); }

Асинхронность

Java позволяет использовать потоки для разделения обработки и параллельного выполнения различных операций.

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

NodeJS является асинхронным по своей конструкции и использует API JavaScript Promise, распределяя обработку на несколько потоков. Успешные или неуспешные результаты могут быть обработаны по мере необходимости.

API-интерфейс Promise также доступен в браузерном JavaScript, что позволяет интерфейсным приложениям перемещать требовательные действия из основного потока пользовательского интерфейса (UI), чтобы обеспечить более быструю и удобную работу.

JavaScript также можно запускать на чем угодно

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

JS можно реализовать в настольных приложениях через ElectronJS или Cordova/React Native для мобильных приложений. JavaScript позволяет вывести свое решение на рынок на любой платформе — от умных холодильников до автомобилей.

Безопасность

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

NodeJS поддерживает несколько типов криптографии, от защиты трафика через шифрование TLS до шифрования данных на основе ключей PKI.

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

if (data.signature.algorithm.endsWith('ECEncryption')) { const ec = new EDDSA('ed25519'); const key = ec.keyFromSecret(this.request.hash.raw); if (!key.verify(Buffer.from(data.cert, 'base64'), data.signature.value)) { throw new Error('Invalid EC signature (verification failure)'); } } else { const verifier = crypto.createVerify(data.signature.algorithm); verifier.update(this.request.hash.raw); if (!verifier.verify(cert, data.signature.value, 'base64')) { throw new Error('Invalid RSA signature (verification failure)'); } }

TypeScript доступен для строгой типизации в экосистеме JavaScript. Это надмножество JavaScript с открытым исходным кодом, разработанное Microsoft.

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

export default function debounce<T extends unknown[], U>(callback: (...args: T) => PromiseLike<U> | U, wait: number) { let timer: NodeJS.Timer; return (...args: T): Promise<U> => { clearTimeout(timer); return new Promise((resolve) => { timer = setTimeout(() => resolve(callback(...args)), wait); }); }; }

Для приложений с жесткими требованиями к доступу к разным системным компонентам (файловая система, сеть, окружение) есть Deno, созданный создателем NodeJS.

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

Мультиплатформенность

Java достигает своей межплатформенной способности за счет виртуализации с использованием виртуальной машины Java (JVM). NodeJS не имеет встроенной виртуализации, но это и не обязательно. Как и Java, решения NodeJS на основе JavaScript можно перемещать между системами с различной архитектурой.

NodeJS основан на движке JavaScript V8, разработанном Google. Термин «V8» знаком как любителям суперкаров, так и разработчикам, так что вы можете догадаться, что он имеет большое значение. NodeJS поддерживает серверные архитектуры x86, ARM и даже IBM (32- и 64-разрядные).

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

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

Открытый источник

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

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

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

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

Почему вы предпочитаете JavaScript и NodeJS в своей следующей системе?

Расход

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

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

Простота

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

Скорость

Разработчики сознательно не используют такие оправдания, но Java — это то, что нужно скомпилировать, прежде чем запускать. Для более крупных и сложных систем (при использовании Java) среднее время компиляции составляет 5–6 минут.

Поначалу 5–6 минут кажутся не так уж и много, но с учетом того, что программистов, компилирующих код несколько раз в день, может быть шесть, общая стоимость проекта составляет уже десятки «свободных от разработки» часов.

Механизмы JavaScript имеют логику компиляции JIT (Just In Time), при которой код компилируется и запускается во время выполнения, которое занимает миллисекунды (в тысячи раз быстрее, чем Java).

NodeJS также на высоте с точки зрения скорости приложений. NodeJS занимает меньше времени на цикл запроса (от запроса до ответа), чем Java, что позволяет Node обслуживать больше запросов в секунду с меньшим использованием ресурсов.

Вымирает ли Java как язык разработки?

Теперь простой ответ: «Нет». В зависимости от своего мнения или взглядов разные разработчики могут дать вам разные ответы на этот вопрос. Однако в ближайшие годы, несомненно, будет больше разговоров и дискуссий, а Java есть и останется привлекательным языком программирования.

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

Сегодня Java больше не уникальна, и из-за скорости, простоты и стоимости предпочтения разработчиков программного обеспечения изменились. перешли на альтернативные языки (JavaScript; Python; Golang и др.).

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

Вот несколько примеров приложений, разработанных для NodeJS:

Первоначально опубликовано на https://blog.twn.ee.