grammY у порівнянні з іншими фреймворками для створення ботів
Хоча grammY використовує певні концепції, які відомі завдяки іншим фреймворкам для ботів та вебзастосунків, він був написаний з нуля для забезпечення кращої організації коду і швидкості роботи. Інакше кажучи, в grammY не використовується код інших фреймворків, але grammY буде знайомим і зрозумілим, якщо ви маєте досвід використання інших фреймворків.
Будь ласка, враховуйте, що це порівняння є упередженим, хоча ми й намагалися надати вам обʼєктивний огляд переваг та недоліків використання grammY у порівнянні з іншими бібліотеками. Ми намагаємося підтримувати цю статтю в актуальному стані. Якщо ви помітили, що інформація в цій статті застаріла, будь ласка, відредагуйте її, скориставшись посиланням внизу.
Порівняння з іншими фреймворками на JavaScript
Спочатку оберіть вашу мову програмування
Оскільки ви читаєте документацію до фреймворку з екосистеми JavaScript, вам, напевно, цікавіше порівняння з бібліотеками, які працюють на Node.js або Deno. Однак, якщо це не про вас, прокрутіть униз, щоб перейти до порівняння про те, які мови програмування підходять для розробки ботів найкраще. Також ви знайдете коротке порівняння з фреймворками з інших мов, переважно з Python.
Існує два головних проєкти, якими надихався grammY, а саме: Telegraf та NTBA. Наразі ми зосередимо наше порівняння на них, але в майбутньому ми (чи ви?) можемо додати інші порівняння.
Telegraf
grammY походить своїм корінням від Telegraf, тож нижче приведений короткий огляд того, як ці фреймворки повʼязані між собою.
Трохи історії
Telegraf дивовижна бібліотека, і без неї grammY не був би там, де він є зараз. Однак раніше Telegraf був написаний на JavaScript (у 3-й версії). Анотації типів додавалися вручну і погано підтримувалися, тому вони зазвичай були неповними, неправильними і неактуальними. Надійні анотації типів є важливим аспектом будь-якої серйозної бібліотеки, оскільки вони надають підтримку інструментів розробки, а також дозволяють вам значно швидше виконувати необхідні зміни у вашій кодовій базі. Чимало людей надають перевагу типізації при розробці складних ботів, а для декого відмова від неї є взагалі критичною.
У 4-й версії Telegraf намагався виправити це шляхом міграції всієї кодової бази на TypeScript. На жаль, багато з описаних типів були настільки складними, що їх було дуже важко зрозуміти, але вони були правильними. Більше того, міграція виявила безліч дивних речей (приклад) у кодовій базі, через які дуже важко зробити правильну типізацію для існуючого коду.
У результаті, незважаючи на те, що у 4-й версії було зроблено спробу покращити коректність типів і інструментів розробки, це призвело до того, що Telegraf став значно складнішим у використанні, ніж його нетипізований попередник. Цілком зрозуміло, що багато користувачів Telegraf 3 не бажали переходити на нову версію. Новим користувачам також стало важче починати роботу з новою версією.
grammY зробив крок назад і переосмислив фреймворк для ботів з типобезпекою, ставлячи зручність на перше місце. Це дозволило уникнути багатьох дратівливих дискусій про те, як впоратися з дивною внутрішньою типізацією. Це дало змогу проєкту мати чистий, узгоджений, компільований код, який надає користувачам відмінні типи (читай підтримка редакторів коду). Безпека типів, в свою чергу, дозволяє використовувати більш просунуті функції, які істотно змінюють наше уявлення про розробку ботів, такі як перетворювачі API.
Сьогодні Telegraf 3 застарів. Існує кілька неофіційних форків, які намагаються підтримувати стару кодову базу в актуальному стані з оновленнями Bot API, але їх сумісність невідома. Крім того, екосистема плагінів Telegraf перейшла на Telegraf 4. Більшість розробників плагінів не підтримують версії для сторонніх форків старих версій Telegraf.
Виходячи з того, що Telegraf завис десь між 3-ю та 4-ю версією, є сенс порівнювати grammY з обома версіями окремо.
Порівняння з 3-ю версією
Враховуючи спільну історію, grammY і Telegraf мають багато спільного. В основі обох лежить система проміжних обробників. Вони також мають багато спільного у базовому синтаксисі:
// Працює як в grammY, так і в Telegraf.
bot.on("message", (ctx) => ctx.reply("Привіт!"));
2
Будь-який код, написаний на Telegraf, буде працювати в grammY з мінімальними змінами. Слід зауважити, що протилежне невірно, оскільки багато функцій grammY недоступні користувачам Telegraf.
Основною перевагою grammY над Telegraf 3-ї версії є значно краща підтримка інструментів розробки. Telegraf 3 написаний на JavaScript. Типи, що постачаються, є некоректними та неповними, а типи Bot API застаріли на кілька років. Як наслідок, немає надійної підтримки автодоповнення або перевірки правильності коду бота. Досвід показує, що вам часто доводиться запускати бота, щоб дізнатися, чи працює ваш код.
У протилежність цьому, grammY написаний на чистому TypeScript. Це надає додаткові можливісті редактору коду, наприклад, VS Code, проаналізувати ваш код під час написання та надавати вам допомогу. Окрім того, він може показувати повну документацію Telegram Bot API в інтерактивному режимі — документація веб-сайту буде доступна прямо на кінчиках ваших пальців при наведенні миші на будь-яку назву або елемент вашого коду.
Ще одна чудова перевага полягає в тому, що ви нарешті можете писати власних ботів на TypeScript. Це було важко робити, тому що неправильні анотації типів Telegraf заважали компіляції повністю правильного коду, таким чином, фактично заохочуючи користувачів не робити спочатку перевірку типів свого коду перед запуском. Однак, типобезпечний код є головною перевагою для будь-якої не надто простої кодової бази.
grammY і Telegraf мають різні кодові бази. Позбувшись від такої спадщини, grammY також зміг значно вдосконалити систему проміжних обробників, що дозволило реалізувати такі цікаві можливості, як фільтри запитів, межі помилок, перетворювачі API та багато інших можливостей. Це також дозволяє розробляти корисні плагіни, які неможливо реалізувати на Telegraf.
Головна перевага Telegraf над grammY полягає в тому, що про нього все ще знає набагато більше людей. Спільнота Telegraf поділена між версіями, але переважна більшість з цих груп створили більше ботів зі своєю версією Telegraf, ніж створено ботів з grammY. Також це означає, що в інтернеті можна знайти більше публікацій про користувачів Telegraf, а також більше неофіційних навчальних посібників від інших розробників.
Порівняння з 4-ю версією
Основна перевага grammY над Telegraf 4 полягає в тому, що він набагато простіший. Наприклад:
- grammY має документацію. Telegraf її не має: замість неї згенерований довідник API, який не містить пояснень.
- Типи в grammY просто працюють і будуть відповідати твоєму коду. У Telegraf часто потрібно писати код певним чином, інакше він не скомпілюється — попри те, що насправді він працюватиме без проблем.
- grammY інтегрує підказки з офіційного довідника Bot API, які допомагають вам під час написання коду. Telegraf не надає вам жодних пояснень щодо вашого коду.
Висновки
Переваги grammY
- Простіший у використанні, ніж Telegraf 3 та 4
- Повноцінна підтримка TypeScript
- Має документацію та згенерований довідник API
- Значно швидший у режимі тривалого опитування (long polling) при використанні плагіну конкурентності для grammY
- Обʼєднана спільнота та екосистема
- Більше плагінів
- Краща інтеграція з базами даних та фреймворками вебзастосунків
- Активніше розвивається
- Зручні та корисні повідомлення про помилки
- Набагато складніше зіткнутися з небезпечними станами гонитви (race condition)
- Розроблений, щоб захистити вас від помилок у програмуванні
- Працює на Node.js, а також на Deno і в браузері
Переваги Telegraf
- Старіший, більш зрілий
- Більше прикладів ботів як у репозиторії, так і у вільному доступі в Інтернеті
NTBA
Пакет node
є другим великим проєктом, який вплинув на розробку grammY. Його головна перевага над іншими фреймворками полягає в тому, що він дуже простий. Його архітектуру можна описати одним реченням, тоді як grammY для цього потрібен посібник на сайті документації. Ми впевнені, що всі ці пояснення на сайті grammY полегшують людям початок роботи, але дуже спокусливо мати бібліотеку, яка взагалі не потребує жодних пояснень.
З іншого боку, це добре лише в короткостроковій перспективі. Ідея помістити все в гігантський файл і використовувати примітивний Event
для обробки потоку складних обʼєктів, так званих вебзапитів, принесла багато болю в світ ботів Telegram і, безумовно, завадила реалізації багатьох гарних ідей.
Боти завжди починаються з малого, але надійна структура повинна забезпечити їм простий шлях для розширення та масштабування. На жаль, NTBA катастрофічно не справляється з цим завданням. Будь-яка кодова база з більш ніж 50 рядків, що використовує NTBA, перетворюється на жахливий безлад з перехресних звернень, які нагадують спагеті. Вам цього не хочеться.
Інші фреймворки
Вважаєте, що ваш улюблений фреймворк в чомусь кращий за grammY? Ви можете змінювати цю сторінку і додавати порівняння або поділитися з нами своїми думками в груповому чаті!
Порівняння з фреймворками з інших мов програмування
Існують причини надавати перевагу іншій мові програмування замість TypeScript. Найважливіше, щоб вам подобалося працювати з вашими інструментами та мовами. Якщо ви твердо налаштовані використовувати щось інше, то можете припинити читання тут.
Оскільки ви продовжуєте читати, напевно, вам цікаво, чому grammY написаний мовою TypeScript і чому вам теж варто розглянути можливість вибору цієї мови для вашого бота.
У цьому розділі ми розглянемо, якими є переваги TypeScript порівняно з іншими мовами, коли мова йде про розробку Telegram ботів. Іншою поширеною мовою для розробки чат-ботів для Telegram є Python, тому ми зупинимося саме на ній. Деякі з наведених нижче тез є скоріше особистими думками, ніж обʼєктивними фактами. У людей різні вподобання, тому сприймайте цей розділ з певною долею скепсису.
Кращий інструментарій редактора. Анотації типів grammY є надзвичайними. Хоча у версії 3.5 Python запровадив типізацію, вона не використовується в екосистемі так широко, як у випадку з JavaScript/TypeScript. Тому це не може зрівнятися з тим, що ви отримуєте “з коробки” з grammY та її супутніми бібліотеками. Разом з типами зʼявляється автодоповнення на кожному кроці розробки, а також корисні допоміжні підказки з поясненнями та посиланнями.
Легше масштабувати кодову базу. Система типів має ще одну перевагу — вона дозволяє масштабувати кодову базу вашого бота. Набагато складніше це робити в проєктах, написаних мовою з гіршою типобезпекою.
Легше масштабувати навантаження. Якщо ваш бот починає набувати популярності, то масштабувати ботів, написаних на JS, а не на Python, значно легше.
Вища швидкість реакції вашого бота. Рушій V8 робить JavaScript найшвидшою скриптовою мовою у видимому всесвіті. Якщо ви хочете, щоб ваш бот був максимально швидким, але при цьому насолоджуватися динамічною мовою, то grammY — ваш найкращий вибір.
Підтримка
async
/await
. Це дуже популярний патерн програмування для приборкання паралелізму. Останніми роками спостерігається стійка тенденція до асинхронного програмування. Найбільший фреймворк для ботів на Python, PTB, оголосив про перехід на використання асинхронного програмування в січні 2021 року, який, як очікується, може зайняти “2 роки”. grammY вже тут. Інші менш відомі фреймворки на Python можуть перейти швидше. Не звертайте уваги на цей пункт, якщо ви використовуєте фреймворк на Python з підтримкоюasync
/await
.
Як не погодитися з цим порівнянням
Якщо ви вважаєте, що на цій сторінці щось не так, не варто засмучуватися! Будь ласка, повідомте нам про це в груповому чаті! Ми будемо раді, якщо ви поділитеся з нами своєю точкою зору. Звичайно, ви також можете просто відредагувати цю сторінку на GitHub або створити issue, щоб повідомити про помилки чи запропонувати щось. Ця сторінка завжди може бути більш обʼєктивною та справедливою.