JSMin - это класс PHP, который, как мы обнаружили, хорошо работает для минимизации нашего JS. Minify - это еще один PHP-проект, который был построен на JSMin и выглядит довольно интересно (объединяет несколько файлов, обрабатывает локальное кэширование и т. Д.), Но у меня еще не было возможности протестировать его, поэтому не могу поручиться насколько хорошо это работает.
В зависимости от того, насколько сложным вы хотите, чтобы ваша кодовая база была, у вас есть несколько разных вариантов того, когда и как вы используете минификатор:
- минимизирует JS в автономном режиме, а регистрирует как минимизированные, так и не минимизированные версии в своей кодовой базе. Это приведет к тому, что в вашей кодовой базе появятся дополнительные файлы, и в какой-то момент кто-то отредактирует неминифицированную версию, забудет ее свернуть и удивится, почему их изменение не вступило в силу!
- минимизирует JS в автономном режиме, а сохраняет только минимизированный JS в вашей кодовой базе . Это не очень хорошая идея, поскольку в будущем обслуживание значительно усложняется.
- другой вариант - минимизировать на лету , поскольку файлы запрашиваются.
Минимизация на лету может быть привлекательным вариантом, так как это означает, что вы можете хранить несжатый файл JS в базе кода для простоты обслуживания, но при этом получить все преимущества минимизированного обслуживания JS.
Проблема с этим подходом состоит в том, что может быть очень вычислительно дорого минимизировать ваш javascript при каждом отдельном запросе.
Чтобы обойти это, большинство минимизаторов JS предлагают возможность кэширования полученного сжатого JS на сервере. Это означает, что первый пользователь, который запросит JS, будет запускать процесс минимизации, но последующие пользователи получат сжатый файл из кэша без дополнительных накладных расходов, необходимых для повторной минимизации JS.
Существует несколько доступных пакетов - в зависимости от выбора веб-сервера - которые позаботятся обо всем за вас ( Пример Apache ), или, если вы действительно хотите, вы можете свернуть свой собственное решение. Вероятно, не самая лучшая идея, но не вредно, если вы попробуете это как домашний проект!
На уровне псевдокода он работает в основном следующим образом:
www.example.com / js / jsm.php? Js = foo.js (этот URL-адрес можно сделать красивее, переписав URL-адрес)
// jsm.php
// On-demand JS minification
// Store result to local cache to reduce overhead from
// multiple requests
// JSMin class
require( 'jsmin.php' );
// Has this file already been cached and put in cache?
// ($cache could be anything from local file cache, memcache, etc)
if( !$cache->checkFor($requestedFilename) )
{
// No.. minimise and put in cache
$minifiedContents = JSMin::minimiseFile(
file_get_content( $requestedFilename )
);
$cache->putValue($requestedFilename, $minifiedContents);
}
// Now serve minimised js from cache
echo $cache->getValue($requestedFilename);