Коли справа доходить до управління активами в додатках Rails, Propshaft — це нове обличчя на сцені, що з'являється як молодший, швидший брат Sprockets. З Rails 8 Propshaft займає центральне місце, пропонуючи оптимізований підхід до керування активами, створений для сучасної веб-розробки. Якщо Sprockets був надійним, але трохи громіздким седаном для конвеєрів активів, то Propshaft — це стильний електричний спортивний автомобіль, який змушує тебе переглянути всю твою поїздку на роботу. Давайте заглибимося в те, чому Propshaft є кращим вибором для продуктивності і чому вам захочеться оновити свою систему. Спойлер: справа не тільки в швидкості, а й у тому, щоб зберігати все простим і розумним.
Гонитва в майбутнє конвеєрів активів Rails з Propshaft 🚗💨
Навіщо виправляти те, що не є (повністю) зламаним?
Sprockets був невід'ємною частиною Rails протягом багатьох років, надійно обробляючи CSS, JavaScript, зображення та багато іншого. Але з віком приходить і обтяження.
Архітектура Sprockets з її складністю, надмірними функціями та сумісністю з застарілими технологіями означає, що вона вже не така прудка, як раніше. Ось і з’являється Propshaft — лаконічний і мінімалістичний конвеєр активів, який є швидшим, легшим і більш адаптованим до сучасних веб-практик.
Propshaft не призначений для виправлення Sprockets. Він приходить, щоб почати з нуля, пропускаючи зайві шари, що сповільнюють процес.
1. Правильне використання digest-файлів
Propshaft додає унікальний дайджест (хеш) до кожного файлу активу, наприклад, app-123abc.js
. Це дозволяє браузерам ефективно кешувати файли, одночасно завантажуючи оновлені версії після внесення змін. Sprockets також реалізовував digest-файли, але Propshaft оптимізує цей процес, уникаючи проміжної обробки. Він безпосередньо додає відбиток файлу під час попередньої компіляції, що усуває потребу в компіляції активів під час виконання. Такий підхід дає менше використання пам'яті та швидші загальні побудови, що критично важливо для додатків з великою кількістю активів.
2.
Простіше обслуговування статичних файлів
В Propshaft активи розглядаються як статичні файли, попередньо скомпільовані та готові до передачі безпосередньо веб-сервером або CDN. Це усуває проміжний шар Sprockets, який динамічно обробляв активи під час виконання. Без цього проміжного шару Propshaft зменшує витрати на обробку кожного запиту до активу. Замість того, щоб інтерпретувати файли динамічно, Propshaft забезпечує їх вирішення під час побудови, що дозволяє досягти швидших відповідей і кращої продуктивності сервера.
3. Сучасні налаштування для сучасних потреб
Propshaft відповідає поточним веб-практикам:
- Пряма інтеграція з CDN: Propshaft спрощує налаштування активів для мереж доставки контенту (CDN). Попередньо скомпільовані файли містять дайджест-хеші, що забезпечує безперебійне оновлення кешу.
- Підтримка Import Maps: Статичний підхід Propshaft інтегрується безпосередньо з import maps, уникаючи складнощів з бандлерами JavaScript, такими як Webpack або esbuild.
Це скорочує час налаштування та уникатиме зайвих залежностей. - Мінімалізм замість застарілих функцій: На відміну від Sprockets, Propshaft не підтримує старі, рідко використовувані функції. Зосередившись на основному функціоналі, він підтримує компактну архітектуру, адаптовану до сучасних додатків.
4. Ефективна передкомпіляція
Процес передкомпіляції в Propshaft оптимізований для швидкості та простоти. Замість того, щоб динамічно шукати залежності, як це робить Sprockets, Propshaft використовує систему, керовану маніфестом. Під час процесу побудови він відображає всі активи на їх відповідні дайджести та вихідні шляхи за один крок. Цей спрощений процес значно зменшує час передкомпіляції, що робить деплой швидшим і менш схильним до помилок. У великих проектах ця різниця може означати економію хвилин на кожному деплої.
Технічні переваги: детальніший погляд
- Маніфест-файл: Propshaft використовує маніфест на основі YAML, щоб відобразити оригінальні шляхи активів на їх версії з дайджестами.
Цей маніфест є статичним і не потребує генерування під час виконання, що зменшує час завантаження під час запитів. - Без резолюції під час виконання: Преобчислюючи всі шляхи активів, Propshaft повністю усуває накладні витрати під час виконання. Sprockets, на відміну, динамічно визначає шляхи для активів, які не були передкомпільовані, що призводить до більш повільної обробки запитів.
- Простіші графи залежностей: Propshaft уникає побудови складних графів залежностей.
Натомість він розглядає активи як окремі файли, усуваючи необхідність у механізмах розв'язування залежностей, які можуть уповільнювати процеси збірки.
Переваги в реальному світі: це не лише цифри
Ось як Propshaft робить різницю:
- Менший навантаження на сервер: Усуваючи динамічне обслуговування активів, Propshaft зменшує використання ресурсів сервера.
- Менше залежностей: Propshaft працює "з коробки" з Rails 8, не потребуючи додаткових гемів чи спеціальних налаштувань.
- Покращене кешування: Статичні іменування активів з дайджестами забезпечують надійне кешування, зменшуючи непотрібні запити і покращуючи час завантаження для кінцевих користувачів.
- Продуктивність розробника: Простота налаштувань і швидші збірки дозволяють розробникам зосередитись на написанні коду, а не на боротьбі з активами.
Коли варто перейти?
Якщо ви починаєте новий проект на Rails 8, Propshaft є стандартом і очевидним вибором.
Для існуючих проектів варто розглянути перехід, якщо:
- Ви стикаєтесь з повільними часами попередньої компіляції або високим використанням пам'яті.
- Ви хочете спростити свою пайплайн обробки активів і покращити інтеграцію з CDN.
- Ви готові прийняти сучасні конвенції Rails і позбутись старих проблем.
Висновок
Propshaft — це подих свіжого повітря для розробників Rails, які шукають швидший і простіший спосіб керувати активами. Орієнтуючись на продуктивність і мінімалізм, він створений для задоволення потреб сучасних веб-додатків без складнощів старих інструментів.
Тож, навіщо чекати? Оновіть до Propshaft і відчуйте переваги легкого та продуктивного пайплайна активів.
Перекладено з: Propshaft vs Sprockets in Rails 8