Pull to refresh

Comments 26

Разверните свою мысль пожалуйста.

Если вы хотите инлайнить стили в элементы 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 лет прекрасный возраст для этого.

Спасибо! Собственно, ради этого статьи и пишу - за один сегодняшний тред уже узнал, что статику надо было сразу отдавать nginx-ом мимо питона. Сам бы дошёл до этого сильно позже.

Возникает только один вопрос т.к. не совсем понятно: сколько вам лет?

К остальному вопросов не возникает, это чистейший, незамутненный ИИ-слоп и возраст не является оправданием этому.

Опустим то, что у вас "CSS-файлы пишут в базы данных" и постоянное упоминание вашего возраста, важно то как вы доносите свою мысль, потому что "Мне 15, код открыт" в контексте ИИ-слопной статьи означает что и код там такой же, навайбкоженый. Его (код) не касалась рука человека.

Я написал этот комментарий не потому что я злобный старикан, а потому что хочу чтобы вы поняли почему вашу статью минусуют, сделали выводы и писали следующие статьи сами, своими словами (пусть и используя ИИ при их подготовке).

Другими словами, дайте нам повод плюсовать вас не только за возраст.

Да, по тексту справедливо, писал с ИИ.

Не соглашусь только про “CSS-файлы пишут в базу”, там реально так было: запрос за файлом из /static/ доходил до питона, срабатывала проверка сессии, а она делала UPDATE и COMMIT. Тупо звучит, тупо и было

Правило простое - не отдавать статику (это то, что не зависит от конкретного пользователя) приложением. CDN. Раньше было модно советовать какой- нибудь cdnjs, но в сегодняшних реалиях уже зависит от юрисдикции вашей аудитории.

Да, согласен. Причём с CDN уже обжёгся: раньше тянул tailwind и часть библиотек с их CDN, но на российских сетях они троттлились и сайт от этого тормозил ещё сильнее. Пришлось сложить всё к себе в /static. Как раз про юрисдикцию, да.

Так что вариант остаётся один: отдавать самому, но nginx-ом, а не питоном. Этим и займусь

Правило простое - не отдавать статику (это то, что не зависит от конкретного пользователя) приложением. CDN.

Правило простое, не стрелять из пушки по воробьям.

да можно и самим веб-сервисом отдавать, если нагрузка не большая.

Справедливо. У меня и нагрузки такой нет: после фикса статика отдаётся за 15 мс, и это почти целиком питон. Так что nginx тут не спасение, а просто аккуратнее.

Проблема была не в том, кто отдаёт файл, а в том, что на каждый файл шла запись в базу

Не представляю степень отбитости персонажа, который доверит хранение своих личных конфиденциальных данных сервису, автор которого персона с такими компетенциями.

А вы гуглите владельцев всех сайтов, на которые заходите?

На сайте должна быть политика обработки персональных данных, и там должны быть реквизиты лица, представляющего этот сервис, туда и смотрю

На Windows с включённым WAL коммит — это не «записать в память», это заставить диск подтвердить запись. Десятки миллисекунд. И пока идёт коммит, остальные запросы стоят в очереди на запись.

sqlite пишет в один поток, поэтому его не рекомендуют для продакшена. После какого-то момента у вас всё просто встанет.

После починки — 0,9 секунды.

Это все еще плохо.


Хотя, статья - реклама, какой тaм CSS...

Согласен, 0,9 это не «быстро», это просто вдвое меньше, чем было. Следующее узкое место - 49 запросов на страницу, из них половина конкретной странице не нужна. Ну и статику с питона убрать, как выше писали

Статья нейросетью, комментарии нейросетью, код нейросетью... И ты ещё писал что "тебе 15", гордясь тем что написал какой то продукт будучи столь молодым. Пацан, это не ты писал продукт, за тебя нейронка написала, причем по-видимому очень посредственно

да, статью писал с ИИ, комментарии тоже, код пишу в паре с Claude Code и об этом в статье сказано

Tailwind

Философский вопрос - зачем вообще CSS фреймворк в эпоху ИИ-разработки? ИИ легко пишет кастомный CSS.

Очередной нейрослоп

Есть Hermes. В чем преимущество твоей идеи?

Идея моего проекта заключалась в том, чтобы на моих устройствах(телефон, мак и тп) был запущен скрипт, который записывает голос когда ктото говорит и также делает скрины, все это сжимает и отправляет на мой сайт. А после этого чтобы я мог просто написать своей запущенной ллмке в чате на сайте(например, о чем я сегодня говорил) и ллмка мне все ответила

Sign up to leave a comment.

Articles