Someone was asking in a Facebook WordPress group whether loading extra stylesheets would reduce website performance. That got me thinking about conducting a test to determine if loading multiple extra stylesheet files would noticeably increase website load time, and if so then by how much. I’ve always pondered on whether combining a large number of separate stylesheet files into one single file, rather than multiple smaller files, would have any significant benefit on website performance.
The expectation might be that loading external files, such as CSS stylesheet files, is a server-side process and therefore because servers tend to be fast any effect on performance should be negligible. However I thought it was time to put this expectation to the test!
The testing was unscientific and rather adhoc! The test tool chosen was GTmetrix.com configured to test from a London based server, the test website was running on WordPress v6.0.1 with the lightweight Astra Theme v3.9.1, together with their ‘Web Design Agency’ Starter Template, running on an OpenLiteSpeed webserver.
We started by testing the Starter Template without adding any extra files and recorded the data associated with Core Web Vitals (CWV) and noted that it was making 24 requests. From this base point we added markup in the header (using WPCode’s Insert Headers and Footers + Custom Code Snippets plugin) to load an additional 6 files to make a total of 30 requests. In each file we added the same minimal CSS which happened to be the following 16 bytes of code:
We retested the CWV metrics at 30 requests, then incrementally added 10 files/requests and retested at each increment with 3 tests per increment. Before testing the Asset CleanUp cache and LiteSpeed Cache were both cleared. Most of the performance tests were conducted between 9am and midday GMT. The data was tabulated in an MS Excel spreadsheet and then plotted in charts as seen in the results below.
The chart below shows seven data points, one for each request increment with LCP being the lowest obtained from 3 x GTmetrix tests; The first data point, LCP 436ms at 24 requests, is for the Astra Starter Template without any additional files. Added to the scatter plot is a trendline (linear regression line) as determined by the MS Excel software. The trendline equation and R-squared value is shown below the trendline on the right. The R-squared value seems to indicate a reasonably high correlation at 0.7747 or about 77%.
If we subtract the base Starter Template LCP time of 436ms from the LCP times to start the Y-axis at zero, and start the X-axis at zero file additions, then we can clearly analyse the additional load time attributed just to the file additions. At the same time if we change the trendline from linear to polynomial (a best fit curve) then we get a closer correlation with an R-squared value of 0.7924 or about 79%. However the Y-axis then starts above zero which doesn’t make any sense for no extra requests, so if we set the Y-axis intercept to zero we see the results in the chart below with an R-squared value of 0.7751 or about 78% rounded up.
If we input the number of additional requests as 10 and 50 into the line’s equation
y = -0.0377x2 + 4.7652x we get 44ms and 144ms respectively, as depicted by the red dotted lines on the chart. So for 10 extra stylesheet files we might expect an extra page load time of around 44ms, and for 50 extra files around 144ms, based on the Web Design Agency Astra Starter Template that we used for testing; That’s ranging from approximately 2.9ms to 4.4ms per request depending on the number of extra requests. Using the line’s equation, one extra request would add a 4.7ms overhead to the LCP time according to this model.
Just for interest, adding FCP (First Contentful Paint) and TTI (Time To Interactive) to the first chart with polynomial lines we get the results shown below.
These website speed tests were intended to assess the load time overhead of loading multiple external files, particularly stylesheet files. We need to do many more tests to see whether the data reliably matches the above trendlines using the R-squared values to assess the level of correlation, and therefore whether the graphs really provide good statistical models.
There is an obvious flaw in this test though! Each external file contained 16Bytes of CSS code, so for the test with 6 extra CSS files, making a total of 30 requests, each of the 6 files should have contained 149Bytes each instead of 16B to be comparable byte-wise to the test with 56 extra files (80 total requests) which would total 896B. So the difference in page size between the test with 6 extra files compared to 56 extra files would be 800B ((56×16) – (6×16)). Hey that’s less than 1KB difference, I’m going to assume the flaw is insignificant! Can you see any other flaws in this model? Please comment below.
Our test website was installed with the LiteSpeed Cache plugin which was set to minify and combine CSS files, so perhaps the same tests should be also be performed with ‘CSS Combine’ set to ‘Off’ and compared.
From our experience the LiteSpeed Cache plugin significantly improves performance without the need for an expensive CDN (Content Delivery Network). CDN services are very useful when the target audience is Worldwide, however our low LCP times demonstrate that, if your target audience is based in the country where the hosting server is located, fast loading times can be achieved without using an expensive monthly CDN subscription service. Typically the faster a page loads the lower the bounce rate – see our previous blog article How fast should my website load in 2022?
Finally if you’re looking for a lightweight fast loading WordPress theme you can get Astra’s latest theme by clicking the link below. Once you’ve installed the Astra Theme, then install their Starter Templates plugin and follow instructions.