Читать «Разгони свой сайт» онлайн - страница 44
Николай Мациевский
P1 — тратим время на загрузку A, B и C
P2 — тратим время на загрузку только D
P3 — тратим время на загрузку E и F
P1 — тратим время на загрузку (A+B+C+D+E+F)
P2 — внешние ресурсы не требуются
P3 — внешние ресурсы не требуются
P1 — тратим время на загрузку (A+B+C)
P2 — тратим время на загрузку (A+C+D)
P3 — тратим время на загрузку (A+С+E+F)
Возможное решение
P1 — тратим время на загрузку (A + B) и C
P2 — тратим время на загрузку D
P3 — тратим время на загрузку (E + F)
Реализация на PHP
После разделения JavaScript- и CSS-кода по файлам для поддержания модульной структуры можно в контроллере создать список файлов, которые надо присоединить к данному документу (вместо того чтобы прописывать это вручную в шаблоне отображения). Но теперь надо сделать так, чтобы до показа шаблона вызывалась функция кэширования, которая проходилась бы по списку, проверяла из него локальные файлы на время изменения, объединяла в один файл и создавала или перезаписывала gz-файл с именем, сформированным из md5-хэша имен входящих файлов.
В качестве рабочего примера можно привести следующую функцию:
function cache_js(){
$arrNewJS=array();
$strHash='';
$strGzipContent='';
$intLastModified=0;
// проходимся по списку файлов
foreach ((array)$this->scripts as $file){
if (substr($file,0,5)=='http:') continue;
if ($file[0]=='/') $strFilename=sys_root.$file;
else $strFilename=sys_root.'app/front/view/'.$file;
$strHash.=$file;
// читаем содержимое в одну строку
$strGzipContent.=file_get_contents($strFilename);