Очередной метод снизить объем SPA приложения (webpack)
Так уж случилось, что в последнее время мне приходится осваивать новые инструменты. Очередным таким инструментом стал webpack.
Инструмент интересный, но после переезда с Google Closure * для меня стало загадкой, почему webpack не ужимает имена классов, как это делает Google Closure Stylesheets.
За день, на коленке, мною был написан plugin который вполне не плохо реализовал этот функционал.
Более подробное описание ниже.
И так начнем с ТЗ. Это делается, во первых, для себя, во вторых, для тех кто еще не понял, что ту происходит, но каким-то образом попал на эту страницу.
Лично я люблю писать большие и красивые длинные имена классов, по которым сразу понятно, что происходит.
Например:
Но можно же сократить header до h, a sidebar до s, таким образом сэкономив не мало байт не только в CSS, но и JS файлах, т.к. скорее всего ваш JS будет содержать селекторы по именам классов.
Однако, от такого сокращения будет страдать читаемость кода, а как следствие и скорость разработки. По этому надо создать инструмент для проведения данной замены автоматически.
Google Closure состоит из нескольких инструментов, один из которых Google Closure Stylesheets, который является и препроцессором и постпроцессором для таблиц стилей.
Как препроцессор он аналогичен всем своим собратьям, но больше всего он похож на SCSS/SASS.
Как постпроцессор он парсит имена классов создавая словарь замен и заменяет все имена классов на их короткие обозначения.
На пример, код выше станет:
А словарь замен будет:
На самом деле функционала там намного больше, но статья не о том.
Есть еще Closure Templates, неплохой шаблонизатор, в котором надо отметить все имена классов специальной директивой, что бы потом применить словарь замен к шаблонам.
Например:
Инструмент интересный, но после переезда с Google Closure * для меня стало загадкой, почему webpack не ужимает имена классов, как это делает Google Closure Stylesheets.
За день, на коленке, мною был написан plugin который вполне не плохо реализовал этот функционал.
Более подробное описание ниже.
И так начнем с ТЗ. Это делается, во первых, для себя, во вторых, для тех кто еще не понял, что ту происходит, но каким-то образом попал на эту страницу.
Лично я люблю писать большие и красивые длинные имена классов, по которым сразу понятно, что происходит.
Например:
.header {
position: fixed;
top: 0;
...
}
.header a {
display: block;
float: right;
...
}
.sidebar {
float:right;
max-width: 30%;
...
}
.sidebar a {
font-size: 16px;
....
}
Но можно же сократить header до h, a sidebar до s, таким образом сэкономив не мало байт не только в CSS, но и JS файлах, т.к. скорее всего ваш JS будет содержать селекторы по именам классов.
Однако, от такого сокращения будет страдать читаемость кода, а как следствие и скорость разработки. По этому надо создать инструмент для проведения данной замены автоматически.
Небольшое пояснение как это работает в Closure
Google Closure состоит из нескольких инструментов, один из которых Google Closure Stylesheets, который является и препроцессором и постпроцессором для таблиц стилей.
Как препроцессор он аналогичен всем своим собратьям, но больше всего он похож на SCSS/SASS.
Как постпроцессор он парсит имена классов создавая словарь замен и заменяет все имена классов на их короткие обозначения.
На пример, код выше станет:
.a {
position: fixed;
top: 0;
...
}
.a a {
display: block;
float: right;
...
}
.b {
float:right;
max-width: 30%;
...
}
.b a {
font-size: 16px;
....
}
А словарь замен будет:
{
"header": "a",
"sidebar": "b"
}
На самом деле функционала там намного больше, но статья не о том.
Есть еще Closure Templates, неплохой шаблонизатор, в котором надо отметить все имена классов специальной директивой, что бы потом применить словарь замен к шаблонам.
Например:
{namespace test}
/**
* Test template
*
*/
{template .test}
HeaderHomeAbout
...
Комментарии (5)
29 ноября 2016 в 21:09
+3↑
↓
почему webpack не ужимает имена классов
Потому что не имеет смысла. У Гугла, мне кажется, так просто исторически сложилось.29 ноября 2016 в 21:35
0↑
↓
Не скажите.
Я тут прошелся Google Closure Stylesheets по
https://habracdn.net/habr/styles/1480427855/_build/global_main.css
И получил 155KB против 207KB и это только стили без скриптов и объемов респонса, т.к. хабр не SPA.
А вот для SPA это был бы отличный профит.29 ноября 2016 в 21:50
0↑
↓
А теперь пройдитесь еще раз, только в этот раз учтя компрессию. Выигрыш будет незначительным, если будет вообще.29 ноября 2016 в 21:54
0↑
↓
Вы правы, не спорю.
С зипом профит только по CSS 5KB.29 ноября 2016 в 22:03
0↑
↓
И 3KB (в зипе) на HTML конкретно этой страницы.
Сколько там у хабра заходов в день…