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 .

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.


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.


AdvAgg 7.x jest teraz w pierwszym RC. drupal.org/project/advagg Polecam go używać
— mikeytown2
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.