LINUX.ORG.RU

Посоветуйте асинхронный бэкенд

 , , ,


2

7

Пишу в dev, а не web-dev потому, что C++ и другие якобы «не вэб языки» здесь в тему.

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

Есть некоторый опыт и хорошие впечатления от Django.

Нужны:

  • Хорошая производительность
  • Асинхронщина для любого IO а-ля нода
  • Выразительный ЯП со СТАТИЧЕСКОЙ типизацией
  • Хорошая документация и немаленькое сообщество (не просто API Reference, а ещё и Tutorials) и чтобы фреймворко-специфичные проблемы легко гуглились
  • Много батареек, как в джанге, обязательна ORM
  • И REST API, и Server Side Rendering // решил отказаться
  • Всякие Light, zero-dependency и embedded мне безразличны // но рассматривались тоже
  • Удобная работа с WebSocket // да, этот пункт я дописал гораздо позже

Лучше советовать не «язык Х» а «язык Х + фреймворк Y».

Также меня царь образумил в том смысле, чтобы делать SPA вместо server side rendering. Ведь перерисовывать ВСЁ по нажатию кнопки - это же антипаттерн отзывчивого интерфейса. Плюс везде, где можно заменю http на websocket - вместо целой страницы по тормозному хттп всего лишь небольшой json по шустрому вебсокету - это сильная разгрузка bottleneck’а на клиенте - обмен данными по сети.

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

UPD Решил брать NestJS + React + MobX. Если по ходу дела откажусь, то буду рассматривать Dart + Flutter, Scala + Play, Java/Kotlin + Spring/Boot.

В будущем обязательно поэксперементирую и запилю сайт крупнее хелловорлда на C++ и Rust и поделюсь с вами впечатлениями.



Последнее исправление: arturianec100 (всего исправлений: 5)

Ответ на: комментарий от dimuska139

А разве в Nest по дефолту много батареек?

Не особо, хотя мне не нравится принудительно пихаемая наколеночная система модулей когда есть более гибкие и выразительные импорты в самом языке (TS и JS с бандлером).

А вообще писали же «единственная альтернатива джанге - это рельсы», и это про количество батареек из коробки. Вот я и написал, что в моём случае «есть приятный опыт с джангой» != «нужны батарейки строго из коробки».

но мне голый Express не зашёл - слишком уж много возможностей сделать неподдерживаемую лапшу.

Это обоюдоострый меч. Когда появляется хоть одно специфичное требование, которое встречается в одном проекте из тысячи - все строгие антилапшичные фреймворки сливаются. Приходится брать более гибкие решения - как правило low level. Express - low level относительно джанги, но high level относительно большинства решений из мира С++.

Важно понимать, что гибкий микрофреймворк можно за пару вечеров подпилить так, чтобы получить 95% фич из любого «строгого монстра» на ваш выбор и при этом не тащить те 5%, из-за которых этот монстр противоречит ТЗ.

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

arturianec100
() автор топика
Ответ на: комментарий от arturianec100

есть более гибкие и выразительные импорты в самом языке (TS и JS с бандлером)

Так DI и импорты в языке - совершенно разные вещи.

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

Насколько я могу судить, Nest - достаточно low level фреймворк для подобных вещей. По крайней мере, я не могу придумать хотя бы одну задачу, которая на Express бы без проблем пилилась, а на Nest были бы хоть какие-то проблемы и недостаток гибкости. Не говоря уже о том, что на Express свет клином не сошёлся, и, если потребовалось юзать Fastify, то в Nest js можно Express без особых проблем заменить на него. А в случае, когда пилишь код вокруг Express, не факт, что такая замена будет столь лёгкой.

dimuska139 ★★
()
Ответ на: комментарий от dimuska139

Так DI и импорты в языке - совершенно разные вещи.

Модульность выразительнее всего описывать именно импортами, а базовые примеры отсюда короче, чем nest’овский DI, не уступая в гибкости. Механизмы «под капотом» - те же.

По крайней мере, я не могу придумать хотя бы одну задачу

Моё же условие: написать функцию, которая принимает данные, обрабатывает и возвращает другие данные. Чтобы одна и та же функция одинаково работала и с http, и с websockets. В случае с явным router.use('/my/pattern', myDecorator(handlerFunc)) декораторы выступают адаптером, предоставляя функции с бизнес логикой единый интерфейс для работы с обоими протоколами. Мне принципиально именно ручками прописывать связь «url pattern <-> handler» отдельно от описания handler.

arturianec100
() автор топика
Ответ на: комментарий от dimuska139

посмотри в сторону FastAPI. Да, типизация там не статическая

Ты что несёшь, посмешище?

anonymous
()
Ответ на: комментарий от anonymous

Посоветуйте асинхронный бэкенд (комментарий)

Он оставлял здесь ссылку на свой телеграм канал. Заходишь в канал и вбиваешь в поиске «В общем, пока что у меня будет реализация на пхпшном уровне» (поиск в интерфейсе телеграм клиента), находишь сообщение от меня от 19 декабря 16:07 и читаешь портянку минимум пол часа. Там даже после срача про иде и вим идёт пост «Давай я тебе расскажу про дарт…». Потом ещё после срача идёт «ты можешь так же про ts/js здесь спрашивать - здесь много адептов. Да и я во многом в теме разбираюсь…». И вообще там надо читать аж до следующего дня (20 декабря).

arturianec100
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.