Скажем, моя структура страницы:
1. one.html :
includes -> a.js , b.js , c.js ,d.js
2. two.html :
includes -> a.js , b.js, x.js, y.js, z.js
3. three.html :
includes -> a.js , b.js, s.js, x.js, y.js
и так далее. Некоторые страницы посещаются чаще, чем другие, например, 3 страницы обеспечивают 99% всех просмотров страниц сайта.
Ищу решение:
i) Объединяйте и сворачивайте файлы в группы, которые можно включать на страницы.
ii) Имеет некоторую логику для сопоставления имен файлов группы с окончательным объединенным именем файла.
iii) Включает минификатор, такой как компилятор Google Closure / компрессор YUI.
Одно из рассмотренных мной решений: PHP minify
который делает большую часть этого. Однако для меня у него есть следующие недостатки:
i) Я бы размещал свои статические комбинированные файлы на сервере CDN, а не на том же веб-сервере, на котором размещается PHP minify, поэтому логика PHP minify для файлов сервера по имени группы не работает для меня.
ii) PHP Minify использует PHP CGI для обработки и обслуживания скриптов, тогда как я хотел бы, чтобы мой миниатюрный контент обслуживался непосредственно с сервера CDN.
Есть ли в PHP Minify некоторые функции для сопоставления имени группы с объединенным именем файла, которые я могу использовать на своей веб-странице, чтобы напрямую установить путь CDN для объединенного файла JS. например
<?php
$groupName = array("onePage" => array('a.js','b.js','c.js','d.js');
?>
<script type="text/javascript" src="http://www.MYSTATICSERVER.com/js/<?php getMergedFileName($groupName)"></script>
Вместо того, чтобы вызывать PHP-скрипт PHP Minify для получения файлов группы, который на самом деле является вызовом PHP-страницы, которая затем обслуживает содержимое javascript из ранее сгенерированных файлов:
<script type="text/javascript" src="http://www.MYWEBSERVER.com/min/?g=onePage" ></script>
(Я согласен, что по большей части это можно сделать, комбинируя различные решения с настраиваемыми сценариями развертывания и инструментами минимизации, например ANT, FABRIC + YUICompressor / ClosureCompiler, но я ищу хорошо разработанное настраиваемое решение, которое я, возможно, пропустил)