У світі веб-розробки продуктивність і простота — це два ключові фактори, які розробники часто намагаються збалансувати. Коли мова йде про Ruby фреймворки, більшість розробників знайомі з Rails — фреймворком повного стека, який пропонує всеохоплююче рішення для веб-додатків. Однак з'явився новий гравець в екосистемі Ruby — Rage. Rage — це легкий, високопродуктивний Ruby фреймворк, призначений для API і мікросервісів. У цій статті ми розглянемо, що таке Rage, його основні функції та як він порівнюється з іншими фреймворками, такими як Rails.
Що таке Rage Framework?
Rage — це мінімалістичний, орієнтований на продуктивність Ruby фреймворк, який орієнтований на висококонкурентні додатки, такі як API та мікросервіси. Він побудований на сучасній моделі конкуренції, яка використовує fibers замість threads, що дозволяє ефективніше обробляти великомасштабні додатки з численними одночасними запитами. Хоча Rails відомий своєю багатофункціональністю та філософією “конвенція понад конфігурацію”, Rage пропонує спрощений, більш лаконічний підхід, ідеальний для розробників, які хочуть створювати швидкі та високопродуктивні додатки без накладних витрат повноцінного фреймворку.
Ключові характеристики Rage
- Конкуренція на основі Fiber:
- Rage використовує модель конкуренції на основі Fiber в Ruby, що дозволяє ефективно обробляти тисячі одночасних з'єднань.
- Це робить його відмінним вибором для додатків, орієнтованих на I/O (наприклад, API, веб-сервери).
2. Висока продуктивність:
- Rage оптимізований для швидкості та може обробляти значно більше запитів на секунду в порівнянні з традиційними Ruby фреймворками, такими як Rails.
3. Легкий:
- Rage мінімалістичний і не має важких абстракцій або накладних витрат, характерних для Rails. Це робить його ідеальним для мікросервісів і API, де не потрібна вся функціональність Rails.
4. Сумісність з Rack:
- Rage сумісний з Rack, що дозволяє працювати з існуючим середовищем та інструментами Rack.
5. Зручний для розробників:
- Незважаючи на орієнтацію на продуктивність, Rage прагне надати зручний досвід для розробників з чистим та інтуїтивно зрозумілим API.
6. Вбудована підтримка сучасних функцій Ruby:
- Rage використовує сучасні функції Ruby, такі як патерн-матчинг, fibers і refinement.
Як Rage порівнюється з Rails
Коли використовувати Rage
Rage — це відмінний вибір, коли:
- Вам потрібна висока продуктивність і низька затримка.
- Ви будуєте API або мікросервіси.
- Ви хочете використовувати конкуренцію на основі Ruby’s Fiber.
- Вам не потрібна вся функціональність Rails (наприклад, ActiveRecord, ActionMailer).
Як почати працювати з Rage
Ось приклад того, як налаштувати базовий додаток Rage:
- Встановіть Rage:
$ gem install rage-rb
$ bundle
- Створіть простий додаток:
$ rage new my_app
**Запуск додатка:**
Запустіть сервер за допомогою:
rage s
```
Відвідайте http://localhost:3000
, щоб побачити "It works!" у вашому браузері.
Приклад
Приклад контролера може виглядати так:
require "net/http"
class PagesController < RageController::API
rescue_from SocketError do |_|
render json: { message: "error" }, status: 500
end
before_action :set_metadata
def show
page = Net::HTTP.get(URI("https://httpbin.org/json"))
render json: { page: page, metadata: @metadata }
end
private
def set_metadata
@metadata = { format: "json", time: Time.now.to_i }
end
end
створіть маршрутизацію config/routes.rb
Rage.routes.draw do
get "page", to: "pages#show"
end
перейдіть за посиланням http://localhost:3000/page
{
"page": "{\n \"slideshow\": {\n \"author\": \"Yours Truly\", \n \"date\": \"date of publication\", \n \"slides\": [\n {\n \"title\": \"Wake up to WonderWidgets!\", \n \"typeu003Cem\u003EWonderWidgets\u003C/em\u003E are great\", \n \"Who \u003Cem\u003Ebuys\u003C/em\u003E WonderWidgets\"\n], \n \"title\": \"Overview\", \n \"type\": \"all\"\n }\n ], \n \"title\": \"Sample Slide Show\"\n }\n}\n",
"metadata": {
"format": "json",
"time": 1738079537
}
}
Тестування продуктивності
Rage створений для того, щоб перевершити традиційні Ruby фреймворки з точки зору кількості запитів на секунду (RPS) та затримки. Наприклад:
- Rage може обробляти в 10 разів більше RPS порівняно з Rails за деякими тестами.
- Модель конкуренції на основі Fiber зменшує накладні витрати та покращує масштабованість.
Обмеження Rage
- Екосистема:
- Rage є відносно новим, тому його екосистема та спільнота менші порівняно з Rails.
- Можливо, вам доведеться створювати більше з нуля або покладатися на сторонні бібліотеки.
- Крива навчання:
- Якщо ви звикли до Rails, вам доведеться вивчити нові патерни та абстракції.
- Не є фреймворком повного стека:
- Rage не призначений для додатків повного стека. Якщо вам потрібні такі функції, як серверне рендеринг, ActiveRecord або ActionMailer, Rails буде кращим вибором.
Висновок
Rage — це захоплюючий новий фреймворк для Ruby розробників, які потребують високої продуктивності та масштабованості. Він особливо підходить для API, мікросервісів та інших додатків, орієнтованих на I/O. Однак Rails залишається кращим вибором для додатків повного стека або проектів, що вимагають зрілої екосистеми.
Якщо ви зацікавлені у використанні Rage, перегляньте його GitHub репозиторій та документацію для отримання додаткової інформації!
Перекладено з: Introduction to the Rage Framework: A Modern, High-Performance Ruby Solution