Статья

Вопрос ИИ по поводу stihi.ru и lib.ru (в контексте sugata.ru)

Хороший вопрос. Разберу оба примера — как они устроены технически (мгновенная отдача при огромных каталогах).

Сугата ру

stihi.ru — как работает

Это НЕ статический HTML. Стихи.ру — это живой бэкенд + кэш:

  • Огромная база стихов (миллионы) живёт в БД.
  • Страницы отдаются через бэкенд (Perl-приложение, исторически), но с агрессивным кэшированием — часто собранные HTML-файлы сбрасываются в кэш при изменении/добавлении стиха, а читателю отдаётся готовый файл.
  • Ключевое: на странице стиха нет сложной динамики — почти статичный контент + комментарии/счётчики грузятся отдельными запросами. Поэтому файл-кэш почти всегда готов: отдача = дисковый read, мгновенно.

То есть это гибрид: люди редко правят стих, зато много читают → дорого генерировать один раз, потом отдавать кэш тысячи раз. Ровно ваш паттерн «static-first».

Либрусек (библиотека Машкова) — как устроена

lib.ru — тоже не чистый HTML:

  • Это классический сайт 90-х: фактически там уже всё лежит файлами (каталог .txt/.html текстов книг на диске). Бэкенд только строит обложки (каталоги/списки) из структуры папок и индекса.
  • Тексты — обычные файлы, отдаются веб-сервером напрямую + кэшируются. Поэтому мгновенно: nginx отдаёт файл без приложений.
  • Каталоги (страницы авторов/жанров) — генерируются на лету из папок или тоже кэшируются.

lib.ru по сути ближе к вашему проекту, чем stihi.ru: файлы как источник контента, приложение лишь строит навигацию/индексы.

Что общего и чему учит

Оба показывают один принцип:

Контент, который редко меняется, надо отдавать файлами/кэшем, а не генерировать на каждый запрос.

Аспект stihi.ru lib.ru Ваш Sugata
Источник БД Файлы на диске БД → HTML-файлы
Отдача Кэш-HTML Файлы напрямую Файлы напрямую
Живое Комментарии, счётчики Поиск, обложки (пока нет)
Скорость Мгновенно (кэш) Мгновенно (файлы) Мгновенно (файлы)

Ваш текущий подход (полностью статический HTML) — уже лучший вариант для отдачи: как lib.ru, только с генератором. stihi.ru использует кэш-файлы как оптимизацию живого приложения — вам это не нужно, пока нет динамики.

Вывод: оба примера подтверждают вашу архитектуру. Единственное, что они добавляют по сравнению с вами — живые островки (комментарии, счётчики), которые грузятся отдельно, не замедляя основную отдачу файлов.

Разговор идет про: https://sugata.ru

https://github.com/LibArea/Sugata

1 Ответ

  1. Ещё есть LiveJournal написано на Perl (это его архитектурная база с 1999 года, когда Брэд Фицпатрик создал движок). Код был открытым — существовал проект LJ codebase (репозиторий на GitHub от команды ЖЖ), и на его базе поднимались сторонние инстансы. Это одна из причин, почему вокруг ЖЖ было много технической документации и форков.

    Что конкретно на Perl:

    • Основной бэкенд — Perl-модули (обработка запросов, работа с БД, логика постов/комментариев).
    • Плюс MySQL как основное хранилище.
    • Memcached для кэша (ЖЖ был одним из ранних крупных пользователей memcached — ЛайфДжорнал и его инженеры даже поучаствовали в развитии этой технологии).
    • Sphinx для полнотекстового поиска (в более поздние годы).
    • Статика/изображения — через CDN.

    ~

    Вот ещё один: https://github.com/dreamwidth/dreamwidth