Найкраща стратегія агрегації / мінімізації CSS та JS для D7


8

Drupal 6 має дивовижний модуль Advagg , який виконує дивовижну роботу з інтелектуального поєднання CSS та JS, але наразі немає випуску D7.

Я прагну досягти:

  • менше файлів CSS та JS (5 CSS та 5 JS файлів - це занадто багато)
  • Файли JS мають мінімізацію (в даний час ядро ​​робить це лише для CSS)

Чи існує рішення drupal 7, яке допоможе тут? Який досвід інших людей оптимізувати це?


Edit: Це питання було спочатку розміщений в 2011 році Існує в даний час дуже стабільний реліз D7 з advagg .

Відповіді:


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? Зв’язування всього в 1 файл - це, мабуть, жахлива ідея, але як зберегти файли JS до мінімуму?
— Rudie

я спробував код, який тут згадувався. Насправді це створює для мене два стислих js-файлу. Як я можу зробити його одним js-файлом?
— АРУН

@DylanTack на одному з моїх веб-сайтів є проблеми із завантаженням файлів css [ drupal.stackexchange.com/questions/128649/… та адреси веб-сайту [ living.md/] Я блукав, куди поставити ваш код, і чи можу я використовувати ваш код разом із модуль прогрега?
— Яма

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.