Плагин Для Smarty - Комбайн

Плагин позволяет объединить несколько файлов CSS или Javascript вместе.

Согласен, что подобных программных решений очень много, например Минимизировать , ЮИ Компрессор или конкантенатор из сервиса Google Pagespeed. Но для шаблонизатора Умник Ничего подобного мне не попадалось, и я решил написать свой, более простой.



Плагин для Smarty - Комбайн

Плагин работает достаточно просто: при изменении одного из включаемых файлов он создает новый выходной файл и возвращает его путь.

Плагин позволяет решить 2 проблемы — модульность и контроль над обновлением файлов на стороне клиента.

Проблема с модульностью в том, что для относительно сложных проектов приходится включать большое количество различных файлов CSS и JS. Все это приводит к дополнительным запросам к серверу.

Да, фронтенд-серверы с этой задачей прекрасно справляются, но зачем делать 10 запросов, когда можно сделать один? И если вы хотите уменьшить это число обычными методами, вам придется использовать различные дополнительные решения или собирать файл вручную.

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

Не менее важна проблема контроля обновлений ресурсов на стороне клиента.

Наверняка многие сталкивались со старой версией CSS или JS-файла от какого-то клиента, которая вызывала ошибку из-за измененной верстки или API на бэкенде.

И здесь действительно много подводных камней, потому что.

кеширование зависит как от браузера, так и от прокси, а также может зависеть от провайдера (редко, но некоторые используют прозрачный прокси).

Единственный 100% рабочий способ — изменить имя файла.

Остальное может не сработать.

Плагин имеет список из трех входных параметров:

  1. input — простой массив, содержащий список путей к объединяемым файлам;
  2. вывод — путь к выходному файлу;
  3. возраст, время в секундах между проверками на изменения в одном из включаемых файлов.

    Этот параметр можно опустить; по умолчанию это 3600 секунд.

Расскажу, зачем нужен возраст — операции ввода-вывода сегодня одни из самых проблемных.

Несмотря на появление SSD-накопителей, время доступа к файлам все еще присутствует, и если обращений к файлам много, в приложении могут возникнуть проблемы с производительностью.

Теперь все это хорошо кэшируется, но зачем обращаться к кешу, когда в этом нет необходимости? Каждый разработчик имеет право регулировать частоту проверки актуальности файлов, но я бы не советовал устанавливать ее менее 3 секунд, так как это практически бессмысленно.

В своих проектах я передаю этот параметр как переменную, которая зависит от режима работы сайта.

Если сайт в режиме отладки, то 5 секунд, иначе — 3600.

Источник
Код доступный на Гитхабе.



Пример подключения в шаблоне
В Smarty 3 есть возможность создавать массив на лету, поэтому код дан с учетом этой возможности.

В Smarty 2 массив необходимо передавать через отдельную переменную.



<script type="text/javascript" src="/{combine input=array('/js/core.js','/js/slideviewer.js') output='/js/big.js' age='30'}" >

При использовании плагина есть несколько нюансов.

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

Вы не можете комбинировать файлы CSS и JS одновременно.

Плагин протестирован со Smarty 2 и Smarty 3. На данный момент используется в проекте с трафиком около 4000 человек в день.

Я не заметил никаких проблем.

Буду благодарен за сообщения об ошибках и предложения по развитию.

Теги: #автоматизация #php #smarty #php

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.