D7的最佳CSS和JS聚合/最小化策略


8

Drupal 6有一个很棒的advagg模块,可以很好地完成CSS和JS 的智能捆绑,但是目前还没有D7版本。

我希望实现的是:

  • 较少的CSS和JS文件(5个CSS和5个JS文件太多)
  • JS文件具有缩小功能(目前,核心仅针对CSS执行此操作)

是否有drupal 7解决方案会在这里有所帮助?他人在优化此方面有什么经验?


编辑:问题最初发布于2011年。现在有非常稳定的advagg D7版本。

Answers:


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 2012年

没错,如果每个页面加载不同的JS文件,则汇总必然会有所不同。您刚刚重新发现了Drupal 7将文件拆分为功能组(JS_LIBRARY,JS_DEFAULT和JS_THEME)的原因。对于复杂的站点,这通常比一个巨型文件更有效。
Dylan Tack 2012年

1
如果有3个组,头中如何加载5个文件?为什么不永远不超过3个?将所有文件捆绑在一个文件中显然是一个可怕的主意,但是如何使JS文件保持最小?
鲁迪

我已经尝试过这里提到的代码。实际上,它为我创建了两个压缩的js文件。我如何使其成为一个js文件?
2014年

@DylanTack我的网站之一加载css fiels时出现问题[ drupal.stackexchange.com/questions/128649/…和网站地址[ living.md/]我在将代码放到哪里徘徊,我可以将您的代码与advagg模块?
雅马

3

AdvAgg D7正在开发中。其他选项(包括的引号来自其项目页面):

...允许使用uglify.js快速缩小站点JavaScript。默认情况下,该模块依赖于Web服务(uglify.me)进行缩小,因此您无需在服务器上进行任何预处理即可享受缩小的JavaScript的好处。

...旨在帮助加快网站的前端性能。在Speedy模块的第一个版本中,它提供了尚未压缩的核心JavaScript文件的压缩版本。例如,提供了drupal.js的缩小版本,而没有提供jquery.js(已经缩小)。


AdvAgg 7.x现在是第一个RC。drupal.org/project/advagg推荐使用它
mikeytown2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.