Comments 26
Tailwind
Выбрось бяку.
Разверните свою мысль пожалуйста.
Если вы хотите инлайнить стили в элементы HTML, -- что уже достаточно странно, -- ни Tailwind, ни вообще CSS вам для этого не нужен.
Утилитарные классы и инлайн-стили - это не одно и то же, и разница не вкусовая.
style=“…” не умеет ни медиазапросы, ни псевдоклассы. У меня в шаблонах 477 классов с брейкпоинтами (md:, lg:), 1618 с hover: и 615 с focus: — 2710 мест, которые в атрибут style не переписываются в принципе. Пришлось бы всё равно заводить CSS, только теперь рядом с инлайном.
Дальше вес. Собранный Tailwind на всё приложение (383 шаблона) - 96 КБ, 16 КБ в gzip: один запрос, кэш на год. Инлайн-стили не кэшируются никогда — они едут заново в каждом HTML-ответе и повторяются на каждом элементе.
И безопасность. Инлайновые style= требуют style-src ‘unsafe-inline’ в CSP. У меня 430 таких атрибутов в 95 шаблонах, и именно они не дают закрыть эту дыру. Классы не требуют ничего. Так что «инлайнить вместо классов» — не упрощение, а ещё и шаг назад.
С самой претензией к Tailwind я, кстати, наполовину согласен: в статье его как раз наполовину и выкинул - убрал рантайм-компилятор, который пересобирал стили в браузере у каждого посетителя. Осталась обычная статическая таблица стилей, к ней вопросов пока нет. Если есть конкретная - расскажите, послушаю
А зачем мучить себя написанием запросов с Curl, когда время загрузки всего и вся можно посмотреть прямо в браузере, в Dev tools, который есть практически во всех браузерах ?
делала запись в SQLite на каждый CSS-файл
И тут мой мозг сломался... Имелось ввиду "на каждый запрос" (на каждую страницу)?
Какбы CSS/JS/PNG/JPG/WEBP и прочая статика должна отдаваться серверов (Nginx/Apache2/etc..) напрямую, миную любую логику (php/python/c#/etc..)
Про DevTools - я им и мерил, в статье это есть: performance.getEntriesByType(‘navigation’), оттуда FCP, DCL и «45 запросов на страницу». Он отвечает на вопрос «что грузится долго».
curl понадобился для другого вопроса - «почему». Нужно было дёрнуть один и тот же файл десять раз с кукой сессии и десять раз без неё и сравнить медианы. В DevTools это неудобно: кэш, переиспользование соединения, и главное — одиночный замер ничего не значит. «csrf.js: 55 мс» само по себе не выглядит подозрительно. Подозрительным оно становится только рядом с «14 мс без куки».
Про «на каждый CSS-файл» - нет, мозг не сломался, там буквально так. Не на страницу, а на каждый файл. Запрос к /static/whatever.css доходил до приложения, проходил через middleware аутентификации, тот дёргал verify_session(), а он делал SELECT + UPDATE + COMMIT. Сорок файлов на странице - сорок коммитов, все пишут один и тот же таймстамп.
И вот тут вы правы, спасибо. Статику действительно должен отдавать веб-сервер до всякого питона. У меня она сейчас идёт через Starlette StaticFiles, то есть через весь ASGI-стек. Мой фикс убрал поход в базу (55 → 15 мс), но запрос по-прежнему будит Python. Отдать /static через nginx напрямую — правильный следующий шаг, оставшиеся 15 мс он тоже съест. Записал в список.
Продолжайте. Изучайте программирование. 15 лет прекрасный возраст для этого.

Возникает только один вопрос т.к. не совсем понятно: сколько вам лет?
К остальному вопросов не возникает, это чистейший, незамутненный ИИ-слоп и возраст не является оправданием этому.
Опустим то, что у вас "CSS-файлы пишут в базы данных" и постоянное упоминание вашего возраста, важно то как вы доносите свою мысль, потому что "Мне 15, код открыт" в контексте ИИ-слопной статьи означает что и код там такой же, навайбкоженый. Его (код) не касалась рука человека.
Я написал этот комментарий не потому что я злобный старикан, а потому что хочу чтобы вы поняли почему вашу статью минусуют, сделали выводы и писали следующие статьи сами, своими словами (пусть и используя ИИ при их подготовке).
Другими словами, дайте нам повод плюсовать вас не только за возраст.
Правило простое - не отдавать статику (это то, что не зависит от конкретного пользователя) приложением. CDN. Раньше было модно советовать какой- нибудь cdnjs, но в сегодняшних реалиях уже зависит от юрисдикции вашей аудитории.
Да, согласен. Причём с CDN уже обжёгся: раньше тянул tailwind и часть библиотек с их CDN, но на российских сетях они троттлились и сайт от этого тормозил ещё сильнее. Пришлось сложить всё к себе в /static. Как раз про юрисдикцию, да.
Так что вариант остаётся один: отдавать самому, но nginx-ом, а не питоном. Этим и займусь
Правило простое - не отдавать статику (это то, что не зависит от конкретного пользователя) приложением. CDN.
Правило простое, не стрелять из пушки по воробьям.
да можно и самим веб-сервисом отдавать, если нагрузка не большая.
Не представляю степень отбитости персонажа, который доверит хранение своих личных конфиденциальных данных сервису, автор которого персона с такими компетенциями.
На Windows с включённым WAL коммит — это не «записать в память», это заставить диск подтвердить запись. Десятки миллисекунд. И пока идёт коммит, остальные запросы стоят в очереди на запись.
sqlite пишет в один поток, поэтому его не рекомендуют для продакшена. После какого-то момента у вас всё просто встанет.
После починки — 0,9 секунды.
Это все еще плохо.
Хотя, статья - реклама, какой тaм CSS...
Статья нейросетью, комментарии нейросетью, код нейросетью... И ты ещё писал что "тебе 15", гордясь тем что написал какой то продукт будучи столь молодым. Пацан, это не ты писал продукт, за тебя нейронка написала, причем по-видимому очень посредственно
Tailwind
Философский вопрос - зачем вообще CSS фреймворк в эпоху ИИ-разработки? ИИ легко пишет кастомный CSS.
Очередной нейрослоп
Есть Hermes. В чем преимущество твоей идеи?
Идея моего проекта заключалась в том, чтобы на моих устройствах(телефон, мак и тп) был запущен скрипт, который записывает голос когда ктото говорит и также делает скрины, все это сжимает и отправляет на мой сайт. А после этого чтобы я мог просто написать своей запущенной ллмке в чате на сайте(например, о чем я сегодня говорил) и ллмка мне все ответила
Мой сайт грузился две секунды, потому что каждый CSS-файл писал в базу данных