Issue #3437839 by catch, Luke.Leber, thejimbirch: Only send libraries with aggregate URLs that have the aggregate type included

merge-requests/7020/head^2
Alex Pott 2024-04-23 11:05:25 +01:00
parent 79eed4acc5
commit 22707d5cd0
No known key found for this signature in database
GPG Key ID: BDA67E7EE836E5CE
2 changed files with 49 additions and 41 deletions

View File

@ -143,10 +143,14 @@ class AssetResolver implements AssetResolverInterface {
'preprocess' => TRUE,
];
foreach ($libraries_to_load as $library) {
foreach ($libraries_to_load as $key => $library) {
[$extension, $name] = explode('/', $library, 2);
$definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
if (isset($definition['css'])) {
if (empty($definition['css'])) {
unset($libraries_to_load[$key]);
continue;
}
foreach ($definition['css'] as $options) {
$options += $default_options;
// Copy the asset library license information to each file.
@ -165,7 +169,6 @@ class AssetResolver implements AssetResolverInterface {
$css[$options['data']] = $options;
}
}
}
// Allow modules and themes to alter the CSS assets.
$this->moduleHandler->alter('css', $css, $assets, $language);
@ -176,7 +179,7 @@ class AssetResolver implements AssetResolverInterface {
uasort($css, [static::class, 'sort']);
if ($optimize) {
$css = \Drupal::service('asset.css.collection_optimizer')->optimize($css, $libraries_to_load, $language);
$css = \Drupal::service('asset.css.collection_optimizer')->optimize($css, array_values($libraries_to_load), $language);
}
}
$this->cache->set($cid, $css, CacheBackendInterface::CACHE_PERMANENT, ['library_info']);
@ -240,14 +243,21 @@ class AssetResolver implements AssetResolverInterface {
];
// Collect all libraries that contain JS assets and are in the header.
// Also remove any libraries with no JavaScript from the libraries to
// load.
$header_js_libraries = [];
foreach ($libraries_to_load as $library) {
foreach ($libraries_to_load as $key => $library) {
[$extension, $name] = explode('/', $library, 2);
$definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
if (isset($definition['js']) && !empty($definition['header'])) {
if (empty($definition['js'])) {
unset($libraries_to_load[$key]);
continue;
}
if (!empty($definition['header'])) {
$header_js_libraries[] = $library;
}
}
$libraries_to_load = array_values($libraries_to_load);
// The current list of header JS libraries are only those libraries that
// are in the header, but their dependencies must also be loaded for them
// to function correctly, so update the list with those.
@ -256,7 +266,6 @@ class AssetResolver implements AssetResolverInterface {
foreach ($libraries_to_load as $library) {
[$extension, $name] = explode('/', $library, 2);
$definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
if (isset($definition['js'])) {
foreach ($definition['js'] as $options) {
$options += $default_options;
// Copy the asset library license information to each file.
@ -279,7 +288,6 @@ class AssetResolver implements AssetResolverInterface {
$javascript[$options['data']] = $options;
}
}
}
// Allow modules and themes to alter the JavaScript assets.
$this->moduleHandler->alter('js', $javascript, $assets, $language);

View File

@ -26,8 +26,8 @@ class AssetAggregationAcrossPagesTest extends PerformanceTestBase {
$performance_data = $this->doRequests();
$this->assertSame(4, $performance_data->getStylesheetCount());
$this->assertLessThan(82500, $performance_data->getStylesheetBytes());
$this->assertSame(2, $performance_data->getScriptCount());
$this->assertLessThan(14500, $performance_data->getScriptBytes());
$this->assertSame(1, $performance_data->getScriptCount());
$this->assertLessThan(7500, $performance_data->getScriptBytes());
}
/**
@ -40,8 +40,8 @@ class AssetAggregationAcrossPagesTest extends PerformanceTestBase {
$performance_data = $this->doRequests();
$this->assertSame(4, $performance_data->getStylesheetCount());
$this->assertLessThan(89500, $performance_data->getStylesheetBytes());
$this->assertSame(2, $performance_data->getScriptCount());
$this->assertLessThan(250000, $performance_data->getScriptBytes());
$this->assertSame(1, $performance_data->getScriptCount());
$this->assertLessThan(125500, $performance_data->getScriptBytes());
}
/**