In the previous article, we explored how you can optimise Magento 2 performance with caching. Today, we're going to look at how to use disabled modules to boost Magento 2's performance and, thus, the speed of your site—by 20-30%.
Magento 2 has a lot of built-in modules that provide different functionality, but you don't need to use all of them 100% of the time. This means that you can safely disable elements of the platform's modules to give lacklustre performance a lift. By using the following simple tips, you'll achieve better performance, and your admin users won't have to deal with superfluous functionality that isn't being fully utilised.
Disclaimer: The result described below was obtained with our local machine. Results may differ on a different server, but you'll still see a substantial improvement in your Magneto 2 performance.
Magento 2's command-line tool and configuration provide a mechanism for disabling modules. We'll come back to config a little later.
When using the command-line tool, our command looks like this:
bin/magento module:disable vendore_moduleName
NB: Many of Magneto's core modules can't be disabled using this command, because they have dependencies. If you try to disable a module that's linked to other elements, you'll receive an error message. So, first off, start by disabling the modules that are independent.
Unfortunately, there's no precise mechanism for checking dependencies within Magento 2, but you can use these three tips to see whether specific modules are linked.
Try running the command we've shown above. If the module you're trying to disable has dependencies, it will ping back an error showing a list of the related modules.
This second tip is a little bit more complicated. As in the first instance, you can utilise a command:
bin/magento info:dependencies:show-modules
This command generates a file which should contain the names of all the modules. Under each module name, you'll see the name of the module on which it depends. For example, the below file shows "module-authorization" then, underneath that, you can see "module-backend", which is a dependency.
magento/module-authorization,1,1,0 " -- magento/module-backend”,,1,0 …
This means that in order to disable "module-backend", we first need to disable "module-authorization". But it's important to note that "module-backend" may be linked to other modules, aside from "module-authorization". So, if you're using this method, you'll need to check which other modules also use "module-backend" before you disable it.
The simplest way to get information about dependencies is to install 3rd party modules such as https://github.com/avstudnitz/AvS_DisableModules/. When you install this, it extends Magento's functionality with a new CLI command:
bin/magento info:dependencies:show-removable
By using this command, you'll generate a file called "modules-removable.csv", which contains a list of all the modules that have no dependencies. So, you can easily see which ones can be removed or switched off.
"Modules without dependencies:" " =========================== " … Dotdigitalgroup_Email Magento_Robots MSP_ReCaptcha Dotdigitalgroup_Chat Magento_AdobeStockAdminUi Magento_AdobeStockAsset Magento_AdobeStockClient Magento_AdobeStockImage …
In the case of Magento 2.3.4 CE—the version we're using—we were able to disable the 45 modules shown below. Depending on which version of Magneto 2 you're using, and on which server, your options may be different:
NB: Before disabling any of these modules, it's worth double-checking whether you need them or not. Some of them could contain hidden dependencies or functionalities that you find you rely on. For example, the "Magento_AdminNotification" module is sometimes used by third-party modules, to show notifications.
Coming back to configuration now, this is how our config file (app/etc/config.php) looks. You can use this as an entry point. We've included a code snippet below, which displays the name of each module and the number of dependencies it has next to it. This is a fairly straightforward way of seeing which modules can be switched off to boost your Magento 2 performance.
<?php return [ 'modules' => [ 'Magento_AdminAnalytics' => 1, 'Magento_Store' => 1, 'Magento_AdobeIms' => 1, 'Magento_AdobeImsApi' => 1, 'Magento_AdobeStockAdminUi' => 1, 'Magento_MediaGallery' => 1, 'Magento_AdobeStockAssetApi' => 1, 'Magento_AdobeStockClient' => 1, 'Magento_AdobeStockClientApi' => 1, 'Magento_AdobeStockImage' => 1, 'Magento_AdobeStockImageAdminUi' => 1, 'Magento_AdobeStockImageApi' => 1, 'Magento_AdvancedPricingImportExport' => 0, 'Magento_Directory' => 1, 'Magento_Amqp' => 1, 'Magento_AmqpStore' => 1, 'Magento_Config' => 1, 'Magento_Theme' => 1, 'Magento_Backend' => 1, 'Magento_Variable' => 1, 'Magento_Eav' => 1, 'Magento_Customer' => 1, 'Magento_AuthorizenetGraphQl' => 1, 'Magento_Search' => 1, 'Magento_Backup' => 1, 'Magento_AdminNotification' => 0, 'Magento_BraintreeGraphQl' => 1, 'Magento_Indexer' => 1, 'Magento_Authorization' => 1, 'Magento_BundleImportExport' => 0, 'Magento_Rule' => 1, 'Magento_CacheInvalidate' => 0, 'Magento_Cms' => 1, 'Magento_Catalog' => 1, 'Magento_Quote' => 1, 'Magento_Security' => 1, 'Magento_GraphQl' => 1, 'Magento_EavGraphQl' => 1, 'Magento_StoreGraphQl' => 1, 'Magento_CatalogImportExport' => 1, 'Magento_SalesSequence' => 1, 'Magento_CatalogInventory' => 1, 'Magento_CatalogRule' => 1, 'Magento_Msrp' => 1, 'Magento_CatalogSearch' => 1, 'Magento_Bundle' => 1, 'Magento_Payment' => 1, 'Magento_CatalogUrlRewrite' => 1, 'Magento_CatalogGraphQl' => 1, 'Magento_Widget' => 1, 'Magento_Sales' => 1, 'Magento_Checkout' => 1, 'Magento_CheckoutAgreementsGraphQl' => 1, 'Magento_Vault' => 1, 'Magento_CmsGraphQl' => 1, 'Magento_Downloadable' => 1, 'Magento_CmsUrlRewrite' => 1, 'Magento_CmsUrlRewriteGraphQl' => 1, 'Magento_User' => 1, 'Magento_ConfigurableProduct' => 1, 'Magento_UrlRewrite' => 1, 'Magento_QuoteGraphQl' => 1, 'Magento_ConfigurableProductSales' => 0, 'Magento_GroupedProduct' => 1, 'Magento_Contact' => 1, 'Magento_Cookie' => 0, 'Magento_Cron' => 1, 'Magento_CurrencySymbol' => 0, 'Magento_Captcha' => 1, 'Magento_Integration' => 1, 'Magento_DownloadableGraphQl' => 1, 'Magento_CustomerGraphQl' => 1, 'Magento_CustomerImportExport' => 0, 'Magento_SampleData' => 0, 'Magento_Deploy' => 1, 'Magento_Developer' => 1, 'Magento_Dhl' => 0, 'Magento_AsynchronousOperations' => 1, 'Magento_DirectoryGraphQl' => 1, 'Magento_Tax' => 1, 'Magento_CustomerDownloadableGraphQl' => 1, 'Magento_ImportExport' => 1, 'Magento_Weee' => 1, 'Magento_CardinalCommerce' => 1, 'Magento_CatalogCustomerGraphQl' => 1, 'Magento_AdvancedSearch' => 1, 'Magento_Elasticsearch' => 1, 'Magento_Email' => 1, 'Magento_EncryptionKey' => 0, 'Magento_Fedex' => 0, 'Magento_GiftMessage' => 1, 'Magento_GoogleAdwords' => 0, 'Magento_GoogleAnalytics' => 0, 'Magento_Ui' => 1, 'Magento_GoogleShoppingAds' => 1, 'Magento_BundleGraphQl' => 1, 'Magento_PageCache' => 1, 'Magento_GroupedCatalogInventory' => 1, 'Magento_GroupedImportExport' => 0, 'Magento_CatalogSampleData' => 1, 'Magento_GroupedProductGraphQl' => 1, 'Magento_GroupedProductSampleData' => 1, 'Magento_DownloadableImportExport' => 0, 'Magento_CatalogRuleConfigurable' => 0, 'Magento_InstantPurchase' => 1, 'Magento_Analytics' => 1, 'Magento_Inventory' => 1, 'Magento_InventoryAdminUi' => 1, 'Magento_InventoryAdvancedCheckout' => 1, 'Magento_InventoryApi' => 1, 'Magento_InventoryBundleProduct' => 1, 'Magento_InventoryBundleProductAdminUi' => 1, 'Magento_InventoryCatalog' => 1, 'Magento_InventorySales' => 1, 'Magento_InventoryCatalogAdminUi' => 1, 'Magento_InventoryCatalogApi' => 1, 'Magento_InventoryCatalogSearch' => 1, 'Magento_InventoryConfigurableProduct' => 1, 'Magento_InventoryConfigurableProductAdminUi' => 1, 'Magento_InventoryConfigurableProductIndexer' => 1, 'Magento_InventoryConfiguration' => 1, 'Magento_InventoryConfigurationApi' => 1, 'Magento_InventoryDistanceBasedSourceSelection' => 1, 'Magento_InventoryDistanceBasedSourceSelectionAdminUi' => 1, 'Magento_InventoryDistanceBasedSourceSelectionApi' => 1, 'Magento_InventoryElasticsearch' => 1, 'Magento_InventoryExportStockApi' => 1, 'Magento_InventoryIndexer' => 1, 'Magento_InventorySalesApi' => 1, 'Magento_InventoryGroupedProduct' => 1, 'Magento_InventoryGroupedProductAdminUi' => 1, 'Magento_InventoryGroupedProductIndexer' => 1, 'Magento_InventoryImportExport' => 1, 'Magento_InventoryCache' => 1, 'Magento_InventoryLowQuantityNotification' => 1, 'Magento_Reports' => 1, 'Magento_InventoryLowQuantityNotificationApi' => 1, 'Magento_InventoryMultiDimensionalIndexerApi' => 1, 'Magento_InventoryProductAlert' => 1, 'Magento_InventoryRequisitionList' => 1, 'Magento_InventoryReservations' => 1, 'Magento_InventoryReservationCli' => 1, 'Magento_InventoryReservationsApi' => 1, 'Magento_InventoryExportStock' => 1, 'Magento_InventorySalesAdminUi' => 1, 'Magento_CatalogInventoryGraphQl' => 1, 'Magento_InventorySalesFrontendUi' => 1, 'Magento_InventorySetupFixtureGenerator' => 1, 'Magento_InventoryShipping' => 1, 'Magento_Shipping' => 1, 'Magento_InventorySourceDeductionApi' => 1, 'Magento_InventorySourceSelection' => 1, 'Magento_InventorySourceSelectionApi' => 1, 'Magento_LayeredNavigation' => 0, 'Magento_Marketplace' => 0, 'Magento_AdobeStockAsset' => 1, 'Magento_MediaGalleryApi' => 1, 'Magento_MediaStorage' => 1, 'Magento_MessageQueue' => 1, 'Magento_BundleSampleData' => 1, 'Magento_MsrpConfigurableProduct' => 1, 'Magento_MsrpGroupedProduct' => 1, 'Magento_DownloadableSampleData' => 1, 'Magento_Multishipping' => 1, 'Magento_MysqlMq' => 1, 'Magento_NewRelicReporting' => 0, 'Magento_Newsletter' => 1, 'Magento_OfflinePayments' => 0, 'Magento_SalesRule' => 1, 'Magento_OfflineShipping' => 1, 'Magento_GraphQlCache' => 1, 'Magento_Authorizenet' => 0, 'Magento_Paypal' => 1, 'Magento_PaypalCaptcha' => 1, 'Magento_PaypalGraphQl' => 1, 'MSP_ReCaptcha' => 1, 'Magento_Persistent' => 0, 'Magento_ProductAlert' => 1, 'Magento_ConfigurableSampleData' => 1, 'Magento_ProductVideo' => 0, 'Magento_AuthorizenetAcceptjs' => 1, 'Magento_QuoteAnalytics' => 0, 'Magento_ConfigurableProductGraphQl' => 1, 'Magento_RelatedProductGraphQl' => 1, 'Magento_ReleaseNotification' => 1, 'Magento_InventoryLowQuantityNotificationAdminUi' => 1, 'Magento_RequireJs' => 1, 'Magento_Review' => 1, 'Magento_ReviewAnalytics' => 0, 'Magento_ReviewSampleData' => 1, 'Magento_Robots' => 1, 'Magento_Rss' => 1, 'Magento_ThemeSampleData' => 1, 'Magento_ConfigurableImportExport' => 0, 'Magento_SalesAnalytics' => 1, 'Magento_SalesGraphQl' => 1, 'Magento_SalesInventory' => 1, 'Magento_OfflineShippingSampleData' => 1, 'Magento_CatalogRuleSampleData' => 1, 'Magento_TaxSampleData' => 1, 'Magento_AuthorizenetCardinal' => 1, 'Magento_SalesRuleSampleData' => 1, 'Magento_Elasticsearch6' => 1, 'Magento_CustomerAnalytics' => 1, 'Magento_SendFriend' => 1, 'Magento_SendFriendGraphQl' => 1, 'Magento_InventoryShippingAdminUi' => 1, 'Magento_Signifyd' => 0, 'Magento_Sitemap' => 0, 'Magento_InventoryGraphQl' => 1, 'Magento_UrlRewriteGraphQl' => 1, 'Magento_Webapi' => 1, 'Magento_SwaggerWebapi' => 1, 'Magento_SwaggerWebapiAsync' => 1, 'Magento_Swatches' => 1, 'Magento_SwatchesGraphQl' => 1, 'Magento_SwatchesLayeredNavigation' => 0, 'Magento_SwatchesSampleData' => 1, 'Magento_MsrpSampleData' => 1, 'Magento_TaxGraphQl' => 1, 'Magento_TaxImportExport' => 0, 'Magento_CustomerSampleData' => 1, 'Magento_CatalogCmsGraphQl' => 1, 'Magento_ThemeGraphQl' => 1, 'Magento_CmsSampleData' => 1, 'Magento_Tinymce3' => 1, 'Magento_Translation' => 1, 'Magento_GoogleOptimizer' => 0, 'Magento_Ups' => 0, 'Magento_SalesSampleData' => 1, 'Magento_CatalogUrlRewriteGraphQl' => 1, 'Magento_CatalogAnalytics' => 1, 'Magento_Usps' => 0, 'Magento_CheckoutAgreements' => 1, 'Magento_Braintree' => 1, 'Magento_VaultGraphQl' => 1, 'Magento_Version' => 0, 'Magento_Swagger' => 1, 'Magento_WebapiAsync' => 1, 'Magento_WebapiSecurity' => 0, 'Magento_ProductLinksSampleData' => 1, 'Magento_WeeeGraphQl' => 1, 'Magento_CatalogWidget' => 0, 'Magento_WidgetSampleData' => 1, 'Magento_Wishlist' => 1, 'Magento_WishlistAnalytics' => 0, 'Magento_WishlistGraphQl' => 1, 'Magento_WishlistSampleData' => 1, 'Amazon_Core' => 0, 'Amazon_Login' => 0, 'Amazon_Payment' => 0, 'Dotdigitalgroup_Email' => 1, 'Dotdigitalgroup_Chat' => 1, 'Klarna_Core' => 0, 'Klarna_Ordermanagement' => 0, 'Klarna_Kp' => 0, 'Magento_PaypalReCaptcha' => 1, 'MSP_TwoFactorAuth' => 1, 'Temando_Shipping' => 0, 'Vertex_Tax' => 1, 'Vertex_AddressValidation' => 1, 'Yotpo_Yotpo' => 1 ] ];
Magento 2 is a big, broad e-commerce platform that can be cumbersome because of its size. But it's a solid solution that provides a wide range of functionality. And, although it has certain performance issues, Magento benefits from a lot of contributors who proactively create new modules to cover evolving business needs.
Its modular architecture is a blessing because using the methods we've described above, it's easy to improve Magneto's performance by flicking modules on and off. In fact, by disabling the modules you don't use, you could boost your website's performance by over 30%. The advice we've provided is based on years of experience providing retail software development services.
The breadth of knowledge and understanding that ELEKS has within its walls allows us to leverage that expertise to make superior deliverables for our customers. When you work with ELEKS, you are working with the top 1% of the aptitude and engineering excellence of the whole country.
Right from the start, we really liked ELEKS’ commitment and engagement. They came to us with their best people to try to understand our context, our business idea, and developed the first prototype with us. They were very professional and very customer oriented. I think, without ELEKS it probably would not have been possible to have such a successful product in such a short period of time.
ELEKS has been involved in the development of a number of our consumer-facing websites and mobile applications that allow our customers to easily track their shipments, get the information they need as well as stay in touch with us. We’ve appreciated the level of ELEKS’ expertise, responsiveness and attention to details.