Лучшая стратегия агрегации / минимизации CSS и JS для D7

8

Drupal 6 имеет потрясающий модуль advagg , который отлично справляется с интеллектуальным объединением CSS и JS, но в настоящее время не выпускает D7.

Чего я хочу добиться, так это:

  • меньше файлов CSS и JS (5 файлов CSS и 5 файлов JS слишком много)
  • У файлов JS есть минификация (в настоящее время ядро ​​делает это только для CSS)

Есть ли решение Drupal 7, которое поможет здесь? Каков опыт других людей по оптимизации этого?


Редактировать: вопрос был первоначально опубликован в 2011 году. В настоящее время существует очень стабильный выпуск Advagg D7 .

WIIFM
источник

Ответы:

12

Для D7 есть базовая библиотека, которая имеет режим обучения, который агрегирует на основе реальной статистики вашего сайта.

Если вы хотите объединить все в один гигантский агрегат, я написал статью с примером кода:

/**
 * Implements hook_js_alter().
 */
function mymodule_js_alter(&$javascript) {
  uasort($javascript, 'drupal_sort_css_js');
  $i = 0;
  foreach ($javascript as $name => $script) {
    $javascript[$name]['weight'] = $i++;
    $javascript[$name]['group'] = JS_DEFAULT;
    $javascript[$name]['every_page'] = FALSE;
  }
}

/**
 * Implements hook_css_alter().
 */
function mymodule_css_alter(&$css) {
  uasort($css, 'drupal_sort_css_js');
  $i = 0;
  foreach ($css as $name => $style) {
    $css[$name]['weight'] = $i++;
    $css[$name]['group'] = CSS_DEFAULT;
    $css[$name]['every_page'] = FALSE;
  }
}

В выпуске Drupal.org № 1034208 также предлагается немного ослабить строгие требования к оформлению заказа.

Дилан Тэк
источник
Похоже, что гигантский агрегат не дает правильного поведения, он действительно создает 1 большой файл CSS / JS для страницы, но этот файл будет меняться в зависимости от страницы, на которой вы находитесь. Это явно не идеально.
wiifm
Совершенно верно, если каждая страница загружает разные файлы JS, то совокупность будет обязательно отличаться. Вы только что обнаружили причину, по которой Drupal 7 разбивает файлы на функциональные группы (JS_LIBRARY, JS_DEFAULT и JS_THEME). Со сложными сайтами это часто более эффективно, чем один гигантский файл.
Дилан Тэк
1
Если есть 3 группы, как может быть загружено 5 файлов в голове? Почему не больше 3? Объединение всего в один файл, по-видимому, ужасная идея, но как сохранить минимальный размер файлов JS?
Руди
Я попробовал код, который упоминается здесь. На самом деле он создал два сжатых файла JS для меня. Как я могу сделать это одним файлом JS?
АРУН
@DylanTack На одном из моих веб-сайтов возникла проблема с загрузкой файлов css [ drupal.stackexchange.com/questions/128649/… и адрес веб-сайта [ living.md/]. Я бродил, где можно разместить ваш код, и могу ли я использовать ваш код вместе с модуль advagg?
Яма
3

AdvAgg D7 находится в стадии разработки. Другие варианты (цитаты включены с их страниц проекта):

... позволяет минимизировать JavaScript-код сайта с помощью uglify.js. Модуль по умолчанию использует веб-сервис (uglify.me) для минимизации, поэтому вам не нужно выполнять предварительную обработку на вашем сервере, чтобы воспользоваться преимуществами минимизированного JavaScript.

... разработан, чтобы помочь ускорить работу интерфейса на сайте. В этом первом выпуске модуля Speedy он предоставляет минимизированные версии основных файлов JavaScript, которые еще не минимизированы. Например, минимизированная версия drupal.js предоставляется, а jquery.js (уже минимизированная) - нет.

mikeytown2
источник
AdvAgg 7.x теперь на своем первом RC. drupal.org/project/advagg Рекомендовать использовать его
mikeytown2