Будет ли Node.js всегда оставаться медленным Golang?

Node.js задняя часть Go JavaScript Программа перевода самородков

Будет ли Node.js всегда оставаться медленным Golang?

Новое расширение Node.js, представленное в этом посте, перевернет эту ситуацию с ног на голову

Всегда кажется неизбежным, что вы слышите о следующем предположительно более быстром так называемом «веб-фреймворке» Node.js. Да, мы все знаем, что Express медленный, но есть еще один «веб-фреймворк», который действительно можетпродвигатьПроизводительность ввода-вывода? Ответ — нет, эти новые фреймворки не могут сделать больше с точки зрения производительности ввода-вывода, чем избежать текущих накладных расходов Express. Чтобы пойти дальше, вам нужно копнуть глубже и перепроектировать Node.js, а не просто добавить новый слой поверх него.

Express — один из старейших так называемых «веб-фреймворков» в экосистеме Node.js. Он основан на готовых функциях, предоставляемых Node.js, и предоставляет ориентированный на приложения интерфейс для управления URL-адресами, маршрутами, параметрами, методами и многим другим.

Конечно, он эффективен и элегантен, но ему не хватает производительности. Также недавно появились такие веб-фреймворки, как Fastify и сотни других. Все они предназначены для обеспечения функциональности Express с небольшим снижением производительности. Следует отметить, что это спектакльпотеряа не подъем. Они по-прежнему строго ограничены тем, что может предложить Node.js, чего недостаточно по сравнению с их конкурентами:

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

К счастью, Node.js поддерживает расширения C++, а привязки Google V8 связывают JavaScript с C++ и позволяют вашему коду JavaScript вызывать любое его поведение, даже такое, которое не обеспечивает сам Node.js.

Это позволяет расширять JavaScript. И дает новую перспективу для изучения большего количества вариантов использования JavaScript, чтобы он мог в полной мере использовать функции Google V8, не ограничиваясь тем, что «основные разработчики» Node.js считают достаточно хорошими.

Выпуск нового µWebSockets.js

Я выпускаю новый код µWebSockets.js, доступный сегодня на Github:GitHub.com/u сеть….

  • Установите Node.js с помощью NPM (хотя и размещенного на GitHub): npm install uNetworking/uWebSockets.js#v15.0.0, см. документацию по установке NPM.
  • Компилятор не требуется, работает на Linux, macOS и Windows. Начинаем с версии 15.0.0 и инкрементируем согласно SemVer.

Это еще один веб-сервис для бэкенда JavaScript, написанный примерно в 6 тысячах строк кода на C и C++, что значительно превосходит Golang с точки зрения производительности. Bitfinex.com перенесла свои интерфейсы транзакций (REST и WebSocket) на этот сервис и постепенно переводит его в производство.

Паоло Ардоино из Bitfinex особо отметил: «Это действительно классный проект».

Эта работа была проделана благодаря этим спонсорам: BitMEX, Bitfinex и Coinbase сделали эту работу возможной. Благодаря им у нас появилась новая версия!

Объясните, пожалуйста, что здесь происходит?

Это новый проект под новой лицензией кода Apache 2.0, преемник так называемого "uws". Это полный стек, от ядра системы до движка Google V8, обеспечивающий стабильный, безопасный, соответствующий стандартам, быстрый и легкий ввод-вывод в Node.js:

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

Сам µSockets даже имеет 3 подуровня, начиная сeventingприбытьnetworkingсноваcrypto, каждый подуровень знает только о предыдущем уровне. Это позволяет заменять части, устранять проблемы и добавлять альтернативные реализации без изменения кода высокого уровня.

Устали от OpenSSL? Что ж, OpenSSL можно заменить, заменив ssl.c и его 600 строк кода. Другим уровням даже не нужно знать, что такое SSL, поэтому легко найти ошибки.

Internal sub layers of µSockets

Это очень отличается от реализации Node.js, которая предназначена для «складывания всего вместе». В одном из исходных файлов Node.js вы можете найти вызовы libuv, системные вызовы, вызовы OpenSSL, вызовы V8. Все это собрано вместе без попытки разъединить модули, чтобы разделить их. Это затрудняет внесение каких-либо реальных изменений.

Короче говоря, программирование для µWebSockets.js

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

В некоторых отношениях он может работать лучше на основе SSL и без SSL, чем Gorilla Gorilla от Golang. Тем не менее, код JS через SSL может отправлять сообщения (в некотором роде) быстрее, чем Golang без SSL. Я думаю, это действительно круто.

Быстрая поддержка pub/sub

Socket.IO во многом является эквивалентом Express в реальном времени. Все они одинаково стары, элегантны и популярны, но такжеОченьМедленный:

Большую часть функций, которые Socket.IO может вам помочь, можно охарактеризовать как публикацию/подписку, возможность отправки информации в комнату с несколькими получателями и соответствующую функцию для получения сообщений.

Резервные копии сегодня не имеют никакого смысла, потому что каждый браузер поддерживает WebSockets уже много лет. SSL-трафик не будет перехвачен корпоративными прокси-серверами и будет проходить как любой Http-трафик, поэтому WebSockets через SSL точно не будут заблокированы. У вас все еще могут быть запасные варианты, но они бессмысленны и создают ненужную сложность.

Одной из целей µWebSockets.js является предоставление функциональности, аналогичной Socket.IO, что позволяет полностью заменить его, а не накладывать на него слой. Но это не навязывает какой-либо конкретный нестандартный протокол.

Большинство компаний сталкиваются с некоторыми проблемами публикации/подписки, когда сталкиваются с WebSockets. К сожалению, эффективный сервис pub/sub не был доступен к крайнему сроку выпуска этого релиза, но скоро он появится с очень высоким приоритетом. Это будет очень быстро (уже быстрее, чем Redis в бенчмарках). Уведомление!

Что происходит сейчас?

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

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

Если вы, как компания, считаете, что этот проект имеет смысл и есть финансовый интерес, обязательно свяжитесь с нами. Предоставлю различные консультационные услуги. пожалуйста, свяжитесь с:github.com/alexhultman

Спасибо!

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из ИнтернетаНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллекти другие поля, если вы хотите видеть больше качественных переводов, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.