Hacker News Digest

Тег: #turbo

Постов: 3

How does Turbo listen for Turbo Streams (ducktypelabs.com)

Turbo отслеживает Turbo Streams через два механизма. При отправке форм он перехватывает события submit через слушателя на document, предотвращает стандартную отправку и использует fetch API с заголовком Accept: text/vnd.turbo-stream.html. Это сигнализирует серверу, что можно отвечать Turbo Stream элементами. Сервер, в свою очередь, должен вернуть ответ с Content-Type: text/vnd.turbo-stream.html.

Для обработки ответов Turbo использует слушателя события turbo:before-fetch-response. Этот обработчик проверяет тип содержимого ответа и при совпадении добавляет содержимое в DOM. Когда <turbo-stream> элементы добавляются, они автоматически выполняют одно из семи действий (append, prepend, replace и т.д.). Для обычных fetch-запросов разработчикам нужно самостоятельно добавлять заголовок Accept.

by sidk_ • 13 октября 2025 г. в 21:39 • 77 points

ОригиналHN

#turbo#turbo-streams#rails#fetch-api#dom#web-development

Комментарии (8)

  • Turbo Streams становятся менее актуальными, так как фреймворк уже сам по себе использует их по умолчанию; оставляем только для специфичных сценариев вроде уведомлений.
  • Подписки на каналы и фреймы полезны для изолированных обновлений, но не стоит переусердствовать с ними в ущерб стандартным паттернам.
  • Покупатели из ЮВА сталкиваются с отсутствием покупательского паритета; вопрос о ценах и доступности курса остаётся открытым.
  • Сообщество обеспокоено, что чрезмерная рельсовость может оттолкнуть не-Ruby разработчиков, которые сейчас используют Turbo вне Rails.

Rails on SQLite: new ways to cause outages (andre.arko.net)

Rails + SQLite: новые способы уронить прод

SQLite встроен в процесс веб-сервера — нет отдельного демона, портов, сокетов; всё хранится в одном файле. Плюс: пропали ошибки подключения к БД. Минус: файл живёт в контейнере, а контейнеры пересоздают, и данные исчезают.

Правило 1: клади БД в персистентное хранилище (EBS, Fly Volumes, …) и включи снапшоты.

Правило 2: веб, кеш, очередь и джобы по умолчанию пишут в тот же файл. Удобно, но воркеры теперь должны видеть этот файл. Запускай воркеры в том же VM, либо разнеси данные по разным БД и настрой database.yml.

Правило 3: SQLite блокирует всю БД на время записи. Параллельные длинные запросы = таймауты. Держи транзакции короткими, используй PRAGMA journal_mode=WAL, synchronous=NORMAL, busy_timeout=5000.

Правило 4: бекапы. sqlite3 db.sqlite3 ".backup backup.sqlite3" — атомарно, без остановки сервиса. Крути каждый час и перед деплоем.

Плюсы:

  • FTS5-индекс из коробки
  • Мегабайты вместо гигабайтов RAM
  • $14/мес на Fly.io при 1 млн запросов
  • Нет Redis, Postgres, S3 — только Rails-контейнер

Итог: SQLite позволяет поднять pet-project за вечер, но требует новых привычек: персистентные диски, WAL, короткие транзакции, общий доступ к файлу. Соблюдай правила — и база не уйдёт в /dev/null.

by ingve • 11 сентября 2025 г. в 18:58 • 173 points

ОригиналHN

#rails#sqlite#postgresql#mysql#fly.io#ebs#fts5#wal#litestream#turbo

Комментарии (55)

  • Автор статьи утверждает, что его сервис «Feed Your Email» возможен только благодаря SQLite, но не объясняет, почему именно SQLite, а не PostgreSQL/MySQL.
  • Многие участники считают SQLite удобным для малонагруженных и внутренних приложений из-за простоты развёртывания и отсутствия отдельного процесса БД.
  • Критики отмечают: при росте нагрузки появляются проблемы с бэкапами, масштабированием, единственным писателем и отказоустойчивостью, смывая преимущества.
  • Часть разработчиков использует обёртки вроде Litestream, Turso или Cloudflare D1, чтобы добавить репликацию и горизонтальное масштабирование к SQLite.
  • В сообществе Rails новый тренд — «по-умолчанию SQLite» для быстрого старта MVP, но опытные пользователи предупреждают о риске «выстрелить себе в ногу» при росте проекта.

%CPU utilization is a lie (brendanlong.com) 🔥 Горячее

%CPU — обманка
Система показывает 50 % загрузки, но реально сервер выполняет 60–100 % максимально возможной работы.

Эксперимент
Ryzen 9 5900X (12 ядер / 24 потока), Turbo включён.
Скрипт запускал stress-ng двумя способами:

  • 24 потока по 1–100 % нагрузки;
  • 1–24 потока по 100 %.

Результаты

  • Общий CPU-тест: при 50 % «утилитой» реальная работа 60–65 %.
  • 64-битная математика: 65–85 %.
  • Умножение матриц: 80–100 %.

Почему так

  1. Hyper-threading: после 12 потоков «ядра» делят ресурсы, прирост стремится к нулю.
  2. Turbo: частота падает с 4.9 до 4.3 ГГц при росте загрузки, поэтому «утил» растёт быстрее реальной работы.

Вывод
Полагаться на линейный рост %CPU — ошибка. При эффективной загрузке (>50 %) показания занижены, и различия между процессорами могут быть огромными.

by BrendanLong • 03 сентября 2025 г. в 00:01 • 388 points

ОригиналHN

#cpu#hyper-threading#turbo#stress-ng#postgresql#memcached

Комментарии (134)

  • Участники сходятся во мнении, что «%CPU» — это не ложь, а линейная мера нелинейной реальности: SMT, Turbo, общие ресурсы и ожидание памяти делают 60 % «загрузки» фактически пределом.
  • Практики SRE подтверждают: модели очередей по CPU% работают лучше «старой мудрости», но только если понимать, что 50–60 % уже «почти всё».
  • Несколько человек вспомнили, как менеджеры требовали «увеличить сервер», увидев 100 %, хотя процессор простаивал в busy-wait или ждал I/O.
  • Подчёркивается, что IPC, latency, power-draw и прямое нагрузочное тестирование приложения дают более точную картину, чем сырые проценты.
  • Утилита stress-ng удобна для синтетики, но не для production-бенчмарков; реальные приложения (Postgres, Memcached) ломаются раньше, чем показывает 100 % CPU.