logo
Web
Максим Колмогоров
Максим Колмогоров
SEO

H3 vs Express: что выбрать для разработки

За последнее время появилось очень много разных HTTP-фреймворков для Node.js, которые хотят подвинуть Express с поприща популярного веб-фреймворка. Сегодня мы рассмотрим один из таких инструментов – H3, и сравним с полюбившимся всем старичком Express.

H3 vs Express: что выбрать для разработки

Буквально небольшое введение, вдруг кто-то чего-то не знает или вовсе забыл.

Что такое Express

Express - это фреймворк для разработки веб-серверов, который появился в 2010 году. Вот уже на протяжении нескольких лет Express является стандартом разработки серверов на Node.js. 

Что такое H3

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

За короткое время появилось сразу несколько новых фреймворков: Hono, Hattip, ElysiaJS и H3. И последний, пока что, самый популярный из них.

H3 vs Express: какие отличия

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

“Hello World” приложение

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

“Hello World” проект на Express выглядит как-то так:

А на H3 примерно так:

На первый взгляд отличий почти и нет. Но если всматриваться, то увидим что аргументов req и res в H3 нет, вместо этого там только один аргумент event. Если что, req и res в H3 тоже есть, просто внутри event.node (event.node.req и event.node.res). Плюс сам сервер в H3 мы запускаем через стандартный функционал Node.js - createServer.

Пакеты

Для Express можно найти очень много готовых пакетов в NPM. За целый десяток лет сообщество наплодило просто тонну всего. С H3 ситуация совсем другая, на момент написания этой статьи много чего просто нет: готовых CORS обработчиков, готовых хранилищ для сессий, файловых модулей по типу Multer. Все это надо писать самостоятельно.

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

Работа со статикой

В Express есть свой модуль express.static('folderName') для работы со статическими файлами. А вот с H3 не все так просто. По умолчанию в H3 нет своего модуля для работы со статикой, поэтому даже разработчики рекомендуют установить пакет serve-static. Но H3 может быть запущен через вспомогательный пакет listhen, в котором данный функционал есть.

Listhen

Вспомогательный пакет для H3, который предоставляет дополнительные плюшки для разработчиков: поддержка TypeScript из коробки, готовый dev-сервер, работа со статикой, быстрый запуск одной командой и так далее.

Подходы к разработке

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

Существенное отличие между H3 и Express находится в аргументах reqres и event, о которых мы уже написали выше. Также весь Express построен на промежуточных подпрограммах (middleware), поэтому на один маршрут в router можно передать несколько промежуточных callback функций:

И с помощью next() регулировать “маршрут” запроса:

Естественно, в H3 можно сделать также, но по другому, ибо next() там нет. В H3 каждый метод условного контролера должен возвращать defineEventHandler:

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

И используется где нужно:

Также в Express мы чаще всего указываем какой результат будет возвращен после выполнения через функцию res.send(). Ибо по умолчанию Express возвращает text/html. В H3 достаточно вернуть return и у нас результат автоматически переведется в JSON формат. Другие типы контента уже придется указывать мануально:

Из-за того, что в H3 нужно чуть больше писать кода, потому что тут меньше прослоек, появляется ощущение, что ты более полно контролируешь каждое “дыхание” своего сервера.

Производительность и бенчмарки

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

Если мы рассмотрим бенчмарки web-фреймворков из репозитория the-benchmarker на GitHub, то увидим что H3, в среднем, быстрее Express в 3 раза. И такой результат показывает ни один единственный бенчмарк. Есть еще и другие, которые фиксирует такой же результат.

Ну и это мы только про Node.js говорим, кроме этого H3 поддерживает Deno и Bun. А Express только Deno. Так что, H3 можно разогнать очень даже до хороших скоростей.

***

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

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

Оставьте комментарий

Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности

Нет комментариев