LINUX.ORG.RU

mini-фикация CSS: подходы.

 ,


0

1

WARNING: не требуется рассуждать об осмысленности нижеприведённого. Для тебя смысла нет - ты свободен.

  1. Пишу JS-приложеньки на своём недо-react фреймворке. Юзаю TSX, который компилю с помощью tsc в JS, подставляя свою функцию как jsxFactory. Позволяет писать свои компоненты как
render() {
  return <div cls={["aaa", "bbb"]}>blabla</div>
}

(список строк в ключе «cls» ждёт мой кастомный jsxFactory и пихает эти строки в element.classList.add() и т.п.) юзаю какой-то самописный tsconfig.json в корне проекта и собираю с помощью Makefile. Трушный юниксвей. Смысл был лишь в том, чтобы избавиться от ручного конструирования сложных DOM-конструкций руками в сыром JS, это удобно поручить JSX. Такой костыль уже получаетс достаточно удобным в работе: в TypeScript просто создаёшь компонент, вызываешь render() и готово.

  1. Есть монолитная CSS портянка, в которой руками придуманы имена всем классам. Эти имена используются в коде, аналогичном выше. Т.е. эти имена захардкожены.

  2. Хочется юзать, возможно, несколько исходных CSS - один CSS на один мой JSX-компонент и получить на выходе один монолитный минифицированный CSS с искажёнными именами и выкинутыми комментами. Соответственно, плохо понимаю возможные подходы к внедрению этого на практике.

Речь идёт о работе с базовыми «низкоуровневыми» вещами, типа tsc и подобными, без использования монструозных сборщиков, make пока вполне устраивает на роль «выполнить такую-то таску в зависимости от такой-то». Предпочтения маленьким инструментам, решающим маленькую задачу. Юникс-вей и всё такое, пока без гульпов, вебпаков и прочего такого: тут главное пока изучение работы технологий, а не получение хипстерского смузи-пайплайна сборки.

  1. Видимо первый шаг - сгенерить некий constants.ts, в котором будет что-то типа:
var cn_aaa = "aaa";
var cn_bbb = "bbb";

юзать эти переменные так:

render() {
  return <div cls={[cn_aaa, cn_bbb]}>blabla</div>
}
  1. Далее наворотить какой-то минификатор CSS, который порождает из списка CSS-файлов новый монолитный CSS и новую версию constants.ts с новыми именами классов. Этот монолитный CSS поедет в прод, а новый constants.ts будет использоваться для оконечной компиляции проекта.

  2. Вот только я не знаю таких CSS-минификаторов. «Напиши сам» - звучит норм. Умею, практикую. Но возможно удастся здесь без велосипедов. Велосипеды люблю, но хотелось бы не сильно катастрофически отстать от трендов.



Последнее исправление: magnitoferon (всего исправлений: 3)

Минификация, что js что css бессмыслена - трафик сжимается, на стороне браузера всё кешируется, выгода не заметна даже на нагруженный сайтах. Если она бесплатна или нужна обфускация то нехай буде, но переусложнять и так переусложнённый js движки ради этого - это диагноз кретинизм-а.

Минификация нужна была во времена gwt - там были сжатые паки по 20-40 метров под все тогдашние браузеры и на тогдашних каналах это давало и трафик и небольшую задержку (небольшую на фоне прогрузки браузером всего этого г.). Но сейчас это см. выше.

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 3)
Ответ на: комментарий от vtVitus

Минификация, что js что css бессмыслена

  1. Осмыслена - меньше раундтрипов. Когда изначально разработка проекта оперировала 50 разными typescript/TSX файлами, то пихать на страницу инклуд 50 отдельных файлов - это массовый геноцид на HTTP/1.1.

  2. Она бесплатна.

  3. Ты пытаешься назвать компиляцию C++ исходника в бинарник - переусложнением C++ кода. Странно.

  4. Меньше трафика - непонятно почему этим пренебрегают. Трафик стоит реальных денег.

magnitoferon
() автор топика
Ответ на: комментарий от magnitoferon
    • a. Однофайловость и минификация ортогональны.
    • b. 50 файлов никогда не было.
    • c. Ну и !внезапно! 50 файлов будут загружаться быстрее и кешироваться эффективнее, чем одна дура.
    1. Да мы все видим эту бесплатность.
    1. То есть для тебя минификация файлов это типа компиляции ? Диагноз всё более и более верный.
    1. Посчитай.
vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

a. Однофайловость и минификация ортогональны.

Один хрен в данном контексте.

50 файлов никогда не было.

Было

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

Неверно. Медленнее и неэффективнее.

Да мы все видим эту бесплатность.

Чё тогда спрашиваете.

То есть для тебя минификация файлов это типа компиляции ? Диагноз всё более и более верный.

Нет, а почему ты спросил.

Посчитай.

Посчитал. Вывод: я прав.

magnitoferon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.