Najlepsza strategia agregacji / minimalizacji CSS i JS dla D7

8

Drupal 6 ma niesamowity moduł advagg , który wykonuje niesamowitą robotę inteligentnego łączenia CSS i JS, ale obecnie nie ma wersji D7.

To, co chcę osiągnąć, to:

  • mniej plików CSS i JS (5 plików CSS i 5 JS to zdecydowanie za dużo)
  • Pliki JS mają minimalizację (obecnie rdzeń robi to tylko dla CSS)

Czy istnieje rozwiązanie Drupal 7, które tutaj pomoże? Jakie są doświadczenia innych ludzi w optymalizacji tego?


Edycja: Pytanie zostało pierwotnie opublikowane w 2011 roku. Obecnie dostępna jest bardzo stabilna wersja D7 programu advagg .

wiifm
źródło

Odpowiedzi:

12

W przypadku D7 dostępna jest biblioteka podstawowa z trybem nauki, który agreguje na podstawie rzeczywistych statystyk dotyczących Twojej witryny.

Jeśli chcesz brutalnie zmusić wszystko do stworzenia jednego gigantycznego agregatu, napisałem artykuł z jakimś przykładowym kodem:

/**
 * 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 numer # 1034208 również proponuje złagodzenie rygorystycznych wymagań dotyczących zamawiania.

Dylan Tack
źródło
Olbrzymi agregat nie wydawał się zachowywać poprawnie, rzeczywiście stworzyłby 1 duży plik CSS / JS dla strony, ale ten plik zmieniłby się w zależności od strony, na której jesteś. To oczywiście mniej niż idealne.
wiifm
Dokładnie tak, jeśli każda strona ładuje różne pliki JS, agregacja będzie koniecznie inna. Właśnie odkryłeś powód, dla którego Drupal 7 dzieli pliki na grupy funkcjonalne (JS_LIBRARY, JS_DEFAULT i JS_THEME). W przypadku złożonych witryn jest to często bardziej wydajne niż jeden gigantyczny plik.
Dylan Tack,
1
Jeśli są 3 grupy, w jaki sposób może być załadowanych 5 plików w głowie? Dlaczego nigdy nie więcej niż 3? Pakowanie wszystkiego w 1 pliku jest pozornie okropnym pomysłem, ale jak ograniczyć pliki JS do minimum?
Rudie
wypróbowałem kod wymieniony tutaj. Właściwie to tworzy dla mnie dwa skompresowane pliki js. Jak mogę zrobić to jeden plik js?
ARUN,
@DylanTack jedna z moich stron ma problem z ładowaniem plików css [ drupal.stackexchange.com/questions/128649/… i adresu strony [ living.md/] Wałęsałem się , gdzie umieścić swój kod i czy mogę go używać wraz z moduł advagg?
Yama,
3

AdvAgg D7 jest w fazie rozwoju. Inne opcje (zawarte cytaty pochodzą ze stron projektu):

... pozwala na minimalizację w czasie rzeczywistym kodu JavaScript strony za pomocą uglify.js. Moduł domyślnie polega na usłudze internetowej (uglify.me) w celu przeprowadzenia minimalizacji, więc nie trzeba wykonywać żadnych czynności wstępnych na serwerze, aby korzystać z zalet zminimalizowanego JavaScript.

... zaprojektowany, aby przyspieszyć działanie interfejsu w witrynie. W pierwszym wydaniu modułu Speedy zawiera zminimalizowane wersje podstawowych plików JavaScript, które nie zostały jeszcze zminimalizowane. Na przykład dostarczana jest zminimalizowana wersja pliku drupal.js, a plik jquery.js (już zminimalizowany) nie.

mikeytown2
źródło
AdvAgg 7.x jest teraz w pierwszym RC. drupal.org/project/advagg Polecam go używać
mikeytown2