Advanced Invoice Layout Extension
Über 1.000 Kunden nutzen diese Magento Extension für schönere PDF-Layouts von Rechnungen, Lieferscheinen und Gutschriften.
mehr erfahrenMagento/OpenMage has a default feature to merge all CSS files into one which was implemented back in the old days to reduce HTTP requests and therewith improve the performance for the client. Nowadays with HTTP/2 (or even HTTP/3) the number of requests is not that important anymore (and on the contrary a certain number of parallel asset downloads should be preferred), but there are many other ways the CSS asset delivery can be improved in Magento. Let's see how!
This blog post is a follow-up of my original description of the perfect Magento frontend in 2023. In that previous post I described several measures to improve the CSS in the Magento frontend like Critical Path optimization or the use of utility-based CSS classes which are all very important things.
Now we want to have a look at how to optimize CSS delivery by improving asset minification.
You may ask why it is still beneficial to minify the CSS files at all. Nowadays browsers and webservers like Apache, nginx or Litespeed are able to compress content via gzip
or brotli
before transmission very effectively.
But netherless by minifying and reducing the amount of CSS code on our side we are able to influence the performance even more than simply compressing files: imagine for example code comments which can be removed, rewrite and combine CSS statements to use less selectors/code and remove unused CSS selectors.
In addition optimizing CSS is very important especially for the Critical Path CSS as this influences all relevant performance metrics in Lighthouse like TTFB or LCP. CSS is one of the few elements that the browser definitely requires as early as possible in order to properly display your website.
And of course the best code is the one that is not written (or not shipped to customer)!
For this purpose I can recommend the extension Aoe_JsCssTstamp which basically improves 2 things compared to original Magento behaviour:
s.2fd49f2ddcfae8a2536d440318d4f7cf.css
. This makes cache invalidation e.g. in a content delivery network (CDN) or end user browser very easy.With the help of the second point we can build a local minification pipeline and then store the generated minified CSS files in a folder like minified/css
. Then we can configure the extension to use that folder for our minified versions. Keep in mind that the folder structure below minified/css
has to match the one in the skin
folder.
For the build pipeline I simply use grunt, but any other tool or simple script is also possible. First we have to install some dependencies:
npm i --save-dev grunt grunt-contrib-cssmin grunt-purgecss
In the Gruntfile
I simply use 2 tasks. The first one is the minification of the CSS files:
cssmin: {
skin_css: {
files: [{
expand: true,
cwd: 'src/vianetz/theme/src/',
src: ['skin/frontend/default/vianetz/**/*.css', '!**/*.min.css', '!**/_*.css'],
dest: 'htdocs/minified/css',
ext: '.min.css'
}]
}
},
The second task is the purging. Therefore I use the tool PurgeCSS which allows to scan HTML content (Magento's .phtml
template files) and CSS files and remove which CSS selectors are not in use. You can configure which selectors should not be purged even using regex.
In order not to purge used CSS selectors in Magento CMS Blocks or Pages there are several possibilities to choose from:
data/cms_blocks_pages_live.csv
and include that as content parameter for PurgeCSSSo this is the resulting sample Gruntfile.js
part:
purgecss: {
minified_css: {
options: {
content: ['./htdocs/app/design/frontend/base/default/template/**/*.phtml', './src/vianetz/**/*.phtml', './data/cms_blocks_pages_live.csv'],
dynamicAttributes: ["aria-selected"],
safelist: {
'standard': [
'kbd',
'blockquote'
],
'deep': [
/^body.*/,
/^address-select/,
/^checkout-step-*/
]
}
},
files: [{
expand: true,
src: ['htdocs/minified/css/skin/frontend/default/vianetz/css/**/*.min.css'],
dest: '.'
}]
}
}
By using this simple asset minification pipeline I was able to reduce the CSS size of the homepage of vianetz.com by nearly 30%. You're right the configuration for the purging is a bit tricky as you have to take care that no selectors are missed. So it takes some time to tweak the PurgeCSS safelist
config but a reduction of nearly a third of shipped CSS is definitely worth it.
Of course this heavily depends on your used CSS but as there are a lot of CSS frameworks like Bootstrap etc. used out there, the possibility is high that the percentage is a big one. So you should definitely try it!
After we have now reduced the CSS file sizes to a maximum, in one of the next blog posts we will have a look at how we can further improve CSS delivery by using the very interesting HTTP/2 Early Hints feature.
Reaktionen auf "Optimize CSS Styles in Magento"