Decrease Magento 2 load time just by disabling modules
One of goals of Magento 2 project was providing software with modularity. It gives us many advantages, and one of them is ability to disable modules which are not used. This speeds up compilation process, makes admin backend less-cluttered (what should improve UX) and finally, speeds up page load times.
Let's see what gains it can give. I simply measured load times for the clean Magento installation, the disabled modules and measured them again. To benchmark it I used:
- local environment with PHP 7.1
- clean Magento 2.2.4 installed without demo data
- store installed in single-store mode, cache disabled, enabled production mode
To quickly identify modules which can be disabled I used bin/magento info:dependencies:show-removable
command provided by avstudnitz/disable-modules module. Each command run creates modules-removable.csv file which lists modules which can be disabled. For example:
"Modules without dependencies:"
" =========================== "
Magento_Paypal
Magento_SendFriend
Magento_Webapi
Magento_OfflineShipping
Magento_GoogleAnalytics
Magento_SwatchesLayeredNavigation
Magento_Swatches
Magento_Sitemap
[...]
Then, bin/magento module:disable
command can be used to disable any of these modules. It may require multiple runs - each can generate a different list as after disabling some modules, new modules without dependencies can be identified.
Before you disable module, review its README.md
file to have an idea what it is responsible for, roughly review codebase to se if it's not used anywhere, finally, after disabling module compile store and test if everything still works fine.
Here is the final list I used:
php bin/magento module:disable \
Magento_Weee \
Magento_WebapiSecurity \
Magento_Version \
Magento_Swagger \
Magento_SampleData \
Magento_TaxImportExport \
Magento_Usps \
Magento_Ups \
Magento_Marketplace \
Magento_GroupedImportExport \
Magento_GoogleOptimizer \
Magento_GoogleAdwords \
Magento_Fedex \
Magento_DownloadableImportExport \
Magento_Dhl \
Magento_CustomerImportExport \
Magento_ConfigurableImportExport \
Magento_BundleImportExport \
Magento_AdvancedPricingImportExport \
Amazon_Core \
Amazon_Login \
Amazon_Payment \
Shopial_Facebook \
Temando_Shipping \
Dotdigitalgroup_Email \
Magento_Multishipping \
Klarna_Kp \
Magento_Authorizenet \
Magento_Braintree \
Klarna_Ordermanagement \
Klarna_Core \
Magento_Signifyd \
Magento_NewRelicReporting \
Vertex_Tax \
Magento_ReleaseNotification \
Magento_Analytics \
Magento_WishlistAnalytics \
Magento_SalesAnalytics \
Magento_ReviewAnalytics \
Magento_QuoteAnalytics \
Magento_CustomerAnalytics \
Magento_CatalogAnalytics
Simple benchmarks done before disabling modules:
- Compilation time: 1 min 48 s
- Product page load time: 10,06s
- Homepage load time: 8,69s
And after:
- Compilation time: 1 min 25 s
- Product page load time: 7,06s
- Homepage load time: 5,58s
Disabling not needed modules is simple task which just requires a bit of QA, but as you can see above, it can give significant speed gains. It's worth to perform this task on each store and repeat the review regularly.
Note: initially I also disabled Magento_Persistent
module. Unfortunately, it introduced bugs in add to cart flow, so it's better to leave this one enabled. I also kept Magento_OfflineShipping
and Magento_OfflinePayments
enabled as they can be used in other modules too.
Tags: