Как правильно выбрать фреймворк Node: Express, Koa или Hapi?

Node.js

Резюме:Узел тройка.

FundebugПерепечатано с разрешения, авторские права принадлежат оригинальному автору.

Введение

Node.js впервые был запущен 10 лет назад, и теперь он стал крупнейшим проектом с открытым исходным кодом в мире с +59 000 звезд на GitHub и более 1 миллиарда загрузок. Одной из причин быстрого роста популярности является то, что Node.js позволяет разработчикам использовать один и тот же язык как для клиентской, так и для серверной части приложения: JavaScript. Node.js — это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, предназначенная для создания масштабируемых веб-приложений на стороне сервера и обладающая характеристиками высокого параллелизма и высокой масштабируемости. Из-за его экспоненциального роста и популярности в сообществе было создано множество фреймворков для повышения производительности. В этой статье мы рассмотрим различия между тремя самыми популярными фреймворками в Node.js: Express, Koa и Hapi. В будущих статьях мы рассмотрим Next, Nuxt и Nest.

Сравнение основано на:

  • GitHub Stars и загрузки npm
  • Установить
  • Базовое приложение Hello World
  • выгода
  • недостаток
  • представление
  • Безопасность
  • Участие сообщества

Express

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

  • star

    • Звезды GitHub: +43 000
    • 6 881 035 загрузок npm в неделю
  • Установить

    Убедитесь, что у вас установлены node и npm

        // 你可以将express安装到项目依赖
        npm install express --save
        
        // 如果要临时安装Express而不是将其添加到依赖项列表,则可以使用
        npm install express --no-save
    
  • Hello World

    Это самый простой пример того, как создать экспресс-приложение, которое прослушивает порт 3000 и отвечает «Hello World!».

        // 这里只创建根目录 其他目录返回404
        const express = require('express')
        const app = express()
        const port = 3000
        
        app.get('/', (req, res) => res.send('Hello World!'))
        
        app.listen(port, () => console.log(`Example app listening on port ${port}!`))
    
  • выгода

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

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

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

    Express — это базовая инкапсуляция веб-приложений, наследующая функции Node.js.

    Существуют также некоторые передовые методы повышения производительности, в том числе:

    • Сжать с помощью gzip
    • не использовать синхронизацию
    • Должным образом документировано (для отладки используйте специальные модули, такие как отладка, активность приложения используйте winston или bunyan)
    • Правильно обрабатывать исключения с помощью try-catch или promises
    • Убедитесь, что ваше приложение автоматически перезагружается с помощью диспетчера процессов или систем вроде systemd или upstartinit.
    • Запустите приложение в кластере. Вы можете значительно повысить производительность своего приложения Node.js, запустив кластер процессов.
    • Кэшируйте результаты запроса, чтобы ваше приложение не повторяло операции для обслуживания одного и того же запроса снова и снова.
    • Запустите несколько его экземпляров и распределите трафик с помощью балансировщика нагрузки, такого как Nginx или HAProxy.
    • Используйте обратный прокси для статических ресурсов. Он может обрабатывать страницы ошибок, сжатие, кэширование, обслуживание файлов и балансировку нагрузки и т. д.
    • Дополнительные рекомендации по повышению производительности

Простое приложение «Hello World» имеет следующие запросы производительности в секунду:

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

    Уязвимость Node.js напрямую затрагивает Express, поэтому обязательно используйте последнюю стабильную версию Node.js.

  • Участие сообщества

    • Количество участников: 220
    • Запросов на вытягивание: 821
    • Регулярные мероприятия сообщества Express, включая Gitter, IRC-каналы, проблемы, Wiki и многое другое.

Наконец, Express, вероятно, является самой популярной средой для Node.js, и есть много других популярных сред, построенных на Express.

koa

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

  • star

    • Звезды GitHub: +25 000
    • Еженедельные загрузки npm: +300 тыс.
  • Установить

    Koa требует поддержки nodev7.6.0 или более поздней версии, поскольку функции ES6 используются внутри компании.

        npm i koa
        node my-koa-app.js
    
  • Hello World

    Создайте веб-службу, которая прослушивает порт 3000 и возвращает «Hello World».

        const Koa = require('koa');
        const app = new Koa();
        
        app.use(async ctx => {
          ctx.body = 'Hello World';
        });
        
        app.listen(3000);
    
  • выгода

    • Koa улучшает совместимость, надежность и делает написание промежуточного программного обеспечения более приятным.
    • Интегрировано большое количество веб-API, но промежуточное ПО не привязано
    • Очень легкий, основной модуль Koa состоит всего из 2 тысяч строк кода.
    • Имеет очень хороший пользовательский опыт
    • Лучшая обработка ошибок с помощью try/catch
    • Асинхронный контрольный поток для более читаемого кода
  • недостаток

    • Сообщество коа относительно невелико.
    • Несовместимо с ПО промежуточного слоя в стиле Express (в настоящее время есть ПО промежуточного слоя, совместимое с другими фреймворками).
  • представление

    Koa сама по себе является очень легкой структурой для создания веб-приложений с отличной производительностью. Читаемость кода и ремонтопригодность относительно высоки

    Конечно, некоторые передовые методы повышения производительности также важны, например:

    • кластер
    • пробежать параллельно
    • Использование асинхронного кода API
    • код должен быть небольшим и легким
    • а также с использованием сжатия gzip и т. д.

Простое приложение «Hello World» имеет следующие запросы производительности в секунду:

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

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

  • Сообщество

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

Hapi

Hapi — это фреймворк с относительно богатыми базовыми функциями. Разработчики больше сосредоточены на бизнесе, чем тратят время на создание инфраструктуры. Режим, управляемый конфигурацией, отличается от традиционной работы веб-сервера. Также у него есть уникальная функция создания сервера на определенном IP, с аналогичной функцией на PreHandler. Когда вам это снова понадобится, вы можете перехватить специальные запросы на выполнение некоторых необходимых операций.

  • star _ GitHub Stars: +11000

    • Еженедельные загрузки npm: +222 293
  • Установить

    убедитесь, что у вас установлен узел

    npm install hapi
    
  • Hello World

    В следующем примере показано самое простое приложение hello world, использующее hapi:

        'use strict';
        
        const Hapi=require('hapi');
        
        // 创建一个服务监听8000端口
        const server=Hapi.server({
           host:'localhost',
            port:8000
        });
        
        // 添加路由
        server.route({
            method:'GET',
            path:'/hello',
            handler:function(request,h) {
        
               return'hello world';
            }
        });
        
        // 启动服务
        const start = async function() {
           try {
               await server.start();
           }
           catch (err) {
                console.log(err);
                process.exit(1);
            }
        
           console.log('Server running at:', server.info.uri);
        };
        start();
    
  • выгода

    • Предоставляет мощную систему плагинов, позволяющую быстро добавлять новые функции и исправлять ошибки.
    • Расширяемый API
    • Получите более глубокий контроль над обработкой запросов.
    • Лучший выбор для создания (REST) ​​API, которые обеспечивают маршрутизацию, ввод, проверку вывода и кэширование.
    • Напишите один раз и адаптируйтесь к каждому концу
    • Подробный справочник по API и хорошая поддержка для создания документации
    • Используйте с любой внешней средой, такой как React, Angular и Vue.js, для создания одностраничных приложений.
    • Псевдопромежуточное ПО на основе конфигурации
    • Обеспечивает кэширование, аутентификацию и проверку ввода
    • Предоставляет архитектуру расширения на основе плагинов.
    • Предоставить очень хороший бизнес плагин, например, Joi, Yar, Catbox, Boom, TV и Travelog
  • недостаток

    • сложная структура кода
    • Плагины несовместимы, вы можете использовать только определенные плагины, такие как: catbox joi boom tv good travelogue и т. д.
    • Конечные точки создаются вручную и должны быть протестированы вручную
    • Рефакторинг выполняется вручную
  • представление

    Исследование 017 фреймворков Node показало, что hapi был худшим по производительности по сравнению с другими фреймворками.

    Простое приложение «Hello World» имеет следующие запросы производительности в секунду:

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

    Безопасность hapi в основном зависит от плагиновВыбор плагина

    • CrumbПлагин проверки Anti (XCSRF). Он работает для обычных запросов и запросов CORS.
    • Joi: Язык описания схемы объекта и валидаторы для объектов JavaScript.
    • Hapi-rbacКонтроль доступа пользователей
    • BlankieДостаточно гибкий белый список
    • Cryptilesбиблиотека шифрования
  • Сообщество

    • Количество участников: 184
    • Запросов на вытягивание: 1176

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

Будь то Express, Koa или Hapi, в настоящее время являются очень зрелыми фреймворками. Почти может удовлетворить ваши потребности, нет лучшего, только самое подходящее

Choosing the right Node.js Framework: Express, Koa, or Hapi?

О Фундебаге

FundebugСосредоточьтесь на JavaScript, апплете WeChat, мини-игре WeChat, апплете Alipay, React Native, Node.js и мониторинге ошибок онлайн-приложений Java в режиме реального времени. С момента официального запуска Double Eleven в 2016 году Fundebug обработал в общей сложности более 1 миллиарда ошибок, а платными клиентами являются Google, 360, Kingsoft, People.com и многие другие бренды. приветствую всехБесплатная пробная версия!