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


8

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

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

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

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


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

Ответы:


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 (уже минимизированная) - нет.


AdvAgg 7.x теперь на своем первом RC. drupal.org/project/advagg Рекомендовать использовать его
— mikeytown2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.