MinifyX для Evo и новая версия для Revo

Не люблю я выпускать сыроежки и этот сниппет не исключение. Для кого-то не секрет, что делает этот сниппет, а кто-то узнает что-то новое. В общем данное решение позволяет сжать все подключаемые CSS и JS файлы в 1. Т.е. на выходе получаем всего 1 файл каждого типа. Компрессия + 1 файл вместо 10 позволяет хоть не существенно, но немного ускорить загрузку сайта у клиента.

Как это происходит рассказывал Василий в своем блоге, когда тоже форкнул MinifyX и немного его улучшил. Но т.к. моя задача стостояла в разработке аналогичного решения под evo, то я просто принял во внимание существование данного форка.

Естественно я полез modx.com и нашел там 2 решения от одного автора MinCSS и MinJS. Скачал поставил и возникло сразу куча хочучек
— Хочу не лазить по FTP для небольших правок стилей и js
— Хочу чтобы мои стили и js небыли разбросаны по всему документу, а аккуратненько лежали в 1 файле, который так же будет сжиматься.
— Хочу чтобы это дело все автоматически обновлялось
— Хочу чтобы сниппет лишний раз не выполнялся
— Порой в JS скриптах или стилях требуется указать ID какого-то документа или сгенерировать его URL. Жестко прописывать в файлах не кашерно однако
— Хочу чтобы нельзя было в в конечный файл вывести содержимое config.inc.php
— Хочу чтобы стили разбросаные по разным папкам не теряли пути к картинкам
— Хочу
— Хочу
В общем много чего. Причем почти все, что я перечислил не умеет ни одно просмотренное мной решение.

Плюнул. Взял файлы для компрессии и понеслась. Правда в сниппете MinJS используется PHP класс JSMinPlus. Несмотря на то, что это + (видимо улучшенная версия), я взял проверенный JSMin. Как узнаю чем лучше заменю. А пока так.

В общем все свои хотелки я реализовал. И походу дела решил помочь Василию. Обновил его форк. Прислав реквест с фиксом URL в стилях. Поэтому теперь и Revo, и Evo умеют сжимать стили из разных папок и при этом картинки не потеряются.

Чтобы было понятнее о чем, объясню наглядно

Файл /assets/template/css/style.css
.qwe{
     background:url('../img/hello.jpg');
 }

Файл /assets/css/style.css
.asd{
     background:url('by.jpg');
 }

Таким образом, куда бы мы не положили сжатый файл картинки всегда будут отдавать 404 ошибку. Соответственно мы могли сжимать только стили из одной папки и туда же ложить кеш. Теперь же на выходе мы получим вот такой код
.qwe{
     background:url('/assets/template/css/../img/hello.jpg');
 }.asd{
     background:url('/assets/css/by.jpg');
 }


Но если встретятся

background:url('/1.jpg');
background:url('//2.jpg');
background:url('http://example.com/3.jpg');
background:url('https://example.com/4.jpg');

то эти стили останутся без изменений. В общем сказка.
  • Для Evo идем забирать тут. Там же в ReadMe описан процесс установки и настройки. Для всех желающих помочь есть список TODO. Выполнив эти тудушки решение можно будет считать уже финальным.
  • Для Revo стоит немного подождать, т.к. василий там еще что-то хотел доработать и улучшить. Но мне это уже не интересно. Если же у вас нет терпения, то забрать пакет с фиксом для Revo можно тут.

13 комментариев

avatar
копрессия как запускается?
вызовом сниппета [[MinifyX]]?
  • jeka
  • 0
avatar
Если сниппет был установлен частично (без модуля и плагина), то тогда
[!MinifyX? &CSSfile=`assets/templates/tpl/css/bootstrap.css,assets/js/prettify/prettify.css` &CSSdoc=`2` &JSfile=`assets/js/jquery-1.8.3.min.js,assets/templates/tpl/js/modernizr.custom.28468.js,assets/js/jquery.validate.js,assets/js/jquery.form.min.js,assets/js/prettify/prettify.js` &JSdoc=`3` &parse=`1`!]


Если плоностью, то запуск происходит при запусе модуля или редактировании докуента указаного в JSdoc или CSSdoc модуля. Соответственно в шаблоне вы должны просто написать
<link href="/assets/cache/style.css" rel="stylesheet">
<script src="/assets/cache/script.js" type="text/javascript"></script>


Почитайте ReadMe на гитхабе. Я там постарался все эти моменты описать. Но если что непонятно — спрашивайте.
avatar
Соответственно в шаблоне вы должны просто написать
<link href="/assets/cache/style.css" rel="stylesheet">
<script src="/assets/cache/script.js" type="text/javascript"></script>
вот этого мне не хватало.
спасибо
avatar
В ReadMe написано «Создать плагин MinifyX с кодом из файла plugin.txt», но подобных файлов я в архиве не увидел.
avatar
В последней версии для Evo достаточно просто сниппета с кодом
return require MODX_BASE_PATH.'assets/snippets/MinifyX/minifyx.snippet.php';

После чего можно делать так
[[MinifyX?
	&outFolder=`assets/templates/`
	&outJS=`s.js`
	&outCSS=`s.css`
	&CSSfile=`
		assets/templates/v1/css/style.css,
		assets/js/fancybox/jquery.fancybox.css,
		assets/js/jGrowl/jquery.jgrowl.min.css,
		assets/templates/v1/css/custom.css`
	&JSfile=`
		assets/templates/v1/js/selectivizr-min.js,
		assets/js/fancybox/jquery.fancybox.pack.js,
		assets/js/jGrowl/jquery.jgrowl.min.js,
		assets/templates/v1/js/script.js`
	&jsCompress=`1`
	&cssCompress=`1`
]]
<link type="text/css" rel="stylesheet" href="/assets/templates/s.css">
<script type="text/javascript" src="/assets/templates/s.js"></script>
avatar
Отлично!

В итоге вчера я всё же самостоятельно разобрался и использовал файлы .TPL вместо указанных .txt для ручного создания нужных сниппета, модуля и плагина

Однако конструкция с модулем, связанным плагином и автоисполняемым сниппетом показалась мне хоть и изящной, но несколько громоздкой.

Да и установленная по умолчанию в модуле &outFolder=`assets/cache/` вызывала проблемы, по крайней мере на локалке — «You dont't have permission...» и так далее.

Вопросы:
1. Всё остальное — установка, параметры и т.д. остается прежним, как описано в ReadMe?
2. Параметры CSSdoc и JSdoc можно опустить, как в вашем примере, и соотв. НЕ создавать эти ресурсы на сайте?
3. Моя версия 1.1b-d7.1 достаточна или обновить до 7.1.1 или 7.1.2?
Комментарий отредактирован 2015-08-09 06:59:42 пользователем Harand
avatar
1) Вроде бы да. Но лично я использую только то, что в примере
2) Да
3) Обновляться не обязательно
avatar
Хм. На локалке ошибка — «Прекращена работа Apache HTTP Server».

Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: httpd.exe
Версия приложения: 2.2.4.0
Отметка времени приложения: 45a476e3
Имя модуля с ошибкой: php5ts.dll
Версия модуля с ошибкой: 5.3.3.0
Отметка времени модуля с ошибкой: 4c47440f
Код исключения: c00000fd
Смещение исключения: 0016fcd6
Версия ОС: 6.1.7600.2.0.0.256.1
Код языка: 1049
Дополнительные сведения 1: d4eb
Дополнительные сведения 2: d4eb7cf28a4f910486e91a11f70d294f
Дополнительные сведения 3: 9313
Дополнительные сведения 4: 93136fafc5afa95cd268c6790ac6fc14
avatar
Win7, Denwer (локалка), PHP Version 5.3.3., MODX 1.1b-d7.1

Беглый поиск показал, что может быть что-то связанное с регулярными выражениями при обработке большого объема текста.
avatar
Ещё вопрос.
Почему во фрагменте кода для использования GZIP-сжатия (на ГитХабе) строка AddEncoding gzip .jgz встречается дважды — в конце и в начале?
avatar
Опечатка может быть
avatar
Похоже, это баг самой Винды и локальных серверов на ней. Я уж думал, придётся виртуальную машину ставить и тратить время на освоение настроек.

Но сделал следующее: в файле httpd-mpm.conf добавил строки для Винды:
<IfModule mpm_winnt_module>
   ThreadStackSize 8388608
</IfModule>
И в файле httpd.conf раскомментирвал строку
Include conf/extra/httpd-mpm.conf
И вроде бы всё заработало.
Может, кому-то пригодится для Денвера.
Комментарий отредактирован 2015-08-09 09:30:47 пользователем Harand
avatar
Спасибо! Шикарная штука! Только почему-то через Extras скачивается старая версия...
+ нашлось несколько мелких багов — вроде исправил и отправил пул на Гите.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.