Issue #1404380 by msonnabaum, xjm, mjpa: Fixed Unnecessary aggregation of CSS/JS.
parent
6fbbde25a2
commit
bc7f5c39a4
|
@ -3518,7 +3518,13 @@ function drupal_build_css_cache($css) {
|
||||||
$data = '';
|
$data = '';
|
||||||
$uri = '';
|
$uri = '';
|
||||||
$map = variable_get('drupal_css_cache_files', array());
|
$map = variable_get('drupal_css_cache_files', array());
|
||||||
$key = hash('sha256', serialize($css));
|
// Create a new array so that only the file names are used to create the hash.
|
||||||
|
// This prevents new aggregates from being created unnecessarily.
|
||||||
|
$css_data = array();
|
||||||
|
foreach ($css as $css_file) {
|
||||||
|
$css_data[] = $css_file['data'];
|
||||||
|
}
|
||||||
|
$key = hash('sha256', serialize($css_data));
|
||||||
if (isset($map[$key])) {
|
if (isset($map[$key])) {
|
||||||
$uri = $map[$key];
|
$uri = $map[$key];
|
||||||
}
|
}
|
||||||
|
@ -5020,7 +5026,13 @@ function drupal_build_js_cache($files) {
|
||||||
$contents = '';
|
$contents = '';
|
||||||
$uri = '';
|
$uri = '';
|
||||||
$map = variable_get('drupal_js_cache_files', array());
|
$map = variable_get('drupal_js_cache_files', array());
|
||||||
$key = hash('sha256', serialize($files));
|
// Create a new array so that only the file names are used to create the hash.
|
||||||
|
// This prevents new aggregates from being created unnecessarily.
|
||||||
|
$js_data = array();
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$js_data[] = $file['data'];
|
||||||
|
}
|
||||||
|
$key = hash('sha256', serialize($js_data));
|
||||||
if (isset($map[$key])) {
|
if (isset($map[$key])) {
|
||||||
$uri = $map[$key];
|
$uri = $map[$key];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1423,6 +1423,48 @@ class CommonJavaScriptTestCase extends DrupalWebTestCase {
|
||||||
$this->assertTrue(strpos($javascript, $expected) > 0, t('JavaScript is aggregated in the expected groups and order.'));
|
$this->assertTrue(strpos($javascript, $expected) > 0, t('JavaScript is aggregated in the expected groups and order.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests JavaScript aggregation when files are added to a different scope.
|
||||||
|
*/
|
||||||
|
function testAggregationOrder() {
|
||||||
|
// Enable JavaScript aggregation.
|
||||||
|
config('system.performance')->set('preprocess_js', 1)->save();
|
||||||
|
drupal_static_reset('drupal_add_js');
|
||||||
|
|
||||||
|
// Add two JavaScript files to the current request and build the cache.
|
||||||
|
drupal_add_js('core/misc/ajax.js');
|
||||||
|
drupal_add_js('core/misc/autocomplete.js');
|
||||||
|
|
||||||
|
$js_items = drupal_add_js();
|
||||||
|
drupal_build_js_cache(array(
|
||||||
|
'core/misc/ajax.js' => $js_items['core/misc/ajax.js'],
|
||||||
|
'core/misc/autocomplete.js' => $js_items['core/misc/autocomplete.js']
|
||||||
|
));
|
||||||
|
|
||||||
|
// Store the expected key for the first item in the cache.
|
||||||
|
$cache = array_keys(variable_get('drupal_js_cache_files', array()));
|
||||||
|
$expected_key = $cache[0];
|
||||||
|
|
||||||
|
// Reset variables and add a file in a different scope first.
|
||||||
|
variable_del('drupal_js_cache_files');
|
||||||
|
drupal_static_reset('drupal_add_js');
|
||||||
|
drupal_add_js('some/custom/javascript_file.js', array('scope' => 'footer'));
|
||||||
|
drupal_add_js('core/misc/ajax.js');
|
||||||
|
drupal_add_js('core/misc/autocomplete.js');
|
||||||
|
|
||||||
|
// Rebuild the cache.
|
||||||
|
$js_items = drupal_add_js();
|
||||||
|
drupal_build_js_cache(array(
|
||||||
|
'core/misc/ajax.js' => $js_items['core/misc/ajax.js'],
|
||||||
|
'core/misc/autocomplete.js' => $js_items['core/misc/autocomplete.js']
|
||||||
|
));
|
||||||
|
|
||||||
|
// Compare the expected key for the first file to the current one.
|
||||||
|
$cache = array_keys(variable_get('drupal_js_cache_files', array()));
|
||||||
|
$key = $cache[0];
|
||||||
|
$this->assertEqual($key, $expected_key, 'JavaScript aggregation is not affected by ordering in different scopes.');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test JavaScript ordering.
|
* Test JavaScript ordering.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue