TGViewer
igrishaev igrishaev @igrishaev_blog · 688 subscribers
Post #1237 128
Современные веб-приложения работают так. Есть апишка на сервере, которая возвращает данные в JSON. Бекенд ничего не знает о рендере, а только раздает данные и обрабатывает команды. И есть js-приложение на клиенте, которое забирает данные с бека и рендерит их. Все это понятно, и все так делают – но не думают вот о чем.

У бекенда, как бы криво он ни был написан, есть прочный фундамент – реляционная база данных. Она не пропустит откровенную дичь, сделает проверки на уникальность и целостность, словом, снимает ряд проблем. Кроме того, я могу окинуть всю базу взглядом: схему, зависимости, всякие вьюхи, функции и так далее. Тулинга под реляционные базы столько, что не знаешь, что выбрать.

Реляционная база, пусть даже это Sqlite, воздвигает столь мощный барьер от дурака, что не ценить его означает быть полным болваном. Да, иные ребята берут Монгу и прочие базы без схемы, но это путь в никуда. Рано или поздно проект придется мигрировать на Постгрес, либо стартап сожжет инвестиции и закроется.

Ключевая беда фронтенда в том, что там нет базы данных. Есть ублюдочные LocalStore и IndexedDB, которые по недоразумению называют базами данных. Да, в IndexedDB можно создать индекс btree по произвольному полю. Но в целом эти два ничто иное, как KV-хранилища. А судьба любого KV-хранилища одна – быть помойкой.

Дело в том, что KV не предполагает схемы. В коде нет никакой информации о том, что лежит в словаре. Вижу, что одно событие вынимает словарь, а другое пишет словарь. Что в них – неизвестно.

Сейчас работаю над сложным веб-приложением (UI-частью). Ему около семи лет, сменилось много разработчиков. И все подтверждает мой тезис – для работы с данными KV не годится абсолютно, совершенно. База данных приложения – огромный словарь, сущая помойка. Одни и те же данные читаются с бека и пишутся под разными ключами. Визуализатор базы – студенческая поделка: тысячи ключей не помещаются на экран, нет нормального поиска.

Спрашивается: если веб-приложения так активно работают с данными, то почему в браузере нет нормальной базы? С плоскими таблицами, проверкой целостности, NOT NULL, джоинами и так далее? Чтобы любой открыл схему и сразу понял, что к чему. Ведь когда схема открыта, каждый видит, что и где хранится. При попытке добавить лишнюю таблицу коллеги скажут: друг, эти данные уже хранятся здесь. А когда у вас один KV на всех, каждый тихонько подсирает в него свое барахло. Это проще, чем читать проект или спрашивать коллег, что где лежит. Проще дернуть бек и положить данные под своим ключиком – и плевать, что так поступают пять других разработчиков.

Что самое ужасное и что заставляет меня чуть ли не скрипеть зубами от досады – так это то, что лет десять назад был сделан шаг(!) в правильном направлении. Появился стандарт WebSQL, предлагавший SQL в браузере. Все по классике: таблицы, типы, not null, реляционная алгебра. В качестве бекенда – Sqlite, который мало того, что является общественным достоянием, так и работает в каждом(!) устройстве. Оглянитесь вокруг: на каждом ноуте, компе и смартфоне работают много-много Sqlite-баз. Интегрировать ее в браузерер и прокинуть через JavaScript- апишку, пусть даже в ограниченном виде, должно быть нетрудным делом.

Казалось бы, в вебе была возможна нормальная работа с данными. Но нет! Постепенно поддержку WebSQL выкинули изо всех браузеров, а в 2024 году спецификацию прикрыли. Что мы получили взамен? Ублюдочные LocalStore и IndexedDB, унылые хранилища по ключу.

А ведь реляционная база в браузере – это только начало! Можно было б пойти дальше и сделать бинарный формат для синхронизации серверной базы с клиентской. Сегодня все базы работают в бинарными данными, и нужно только написать спецификацию. Представьте: выполняешь запрос, и бинарный поток из базы сразу идет клиенту безо всяких жысонов и сериализаций. Там они подхватываются в Sqlite. Просто, доступно, открыто.
More from @igrishaev_blog
  1. Sep 25, 2026Так что когда я думаю о том, что мы потеряли и в угоду чего, хочется кататься по полу от о…
  2. Sep 24, 2026Естественная сложность никуда не уходит. Как правило, все что можно сделать – грамотно рас…
  3. Sep 24, 2026Есть у меня идея, которую я называю “теория о несжимаемой сложности”. Звучит так: В каждый…
  4. Sep 19, 2026photo post
  5. Sep 19, 2026Игры (3). Покахонтас #games Ненадолго вернусь к теме игр. С 8-битными играми закончили, пе…
  6. Sep 18, 2026Глава 10. Релевантный поиск Вот, книжка готова. Осталось перечитать ее несколько раз, свер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →