Optimizing Magento Performance
This is a guide for optimizing Magento performance. Most optimizations can be performed on any version of Magento. Those intended for specific versions and newer will be indicated.
Tweak .htaccess
The default .htaccess file that comes with Magento has several sections dealing with performance. These configurations are commented out and will need to be turned on to realize their benefit.
Enable Output Compression
This section will turn on the apache mod_deflate module, which compresses text, css, and javascript before it is sent to the browser. This results in a smaller download size. To enable, simply uncomment the appropriate lines so that it looks like the following:
<IfModule mod_deflate.c>
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
SetOutputFilter DEFLATE
# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
Enable Expires Headers
- NOTE: This does not work on Litespeed servers.
Browsers use Expires headers to determine how long a page component can be cached. Static components, like images, should have far-future expires headers, but truthfully, all page components should have expires headers. To turn this feature on, just uncomment the appropriate line and add "ExpiresActive On" right above it. See below:
<IfModule mod_expires.c>
############################################
## Add default Expires header
## http://developer.yahoo.com/performance/rules.html#expires
ExpiresActive On
ExpiresDefault "access plus 1 year"
</IfModule>
Disable ETags
ETags are a way for browsers to validate cached components across subsequent visits. They can slow down a site served from a cluster if the cluster hasn't implemented them properly. It is best to just turn them off as follows:
############################################
## If running in cluster environment, uncomment this
## http://developer.yahoo.com/performance/rules.html#etags
FileETag none
Magento Admin Tweaks
There are a couple of features that can be enabled in the back end of Magento to optimize performance. Generally, these features are available on versions 1.4.0.1 and higher and should be performed when most of the development work is done.
Combine CSS and JS Files
This feature reduces the number of HTTP requests. For versions earlier than 1.4.x, the Fooman_Speedster extension can be used instead.
- In the Magento Admin, go to System > Configuration > Developer.
- Under "Javascript Settings", change "Merge Javascript Files" to YES.
- Under "CSS Settings", change "Merge CSS Files" to YES.
- Clear the cache.
Enable Flat Catalog
Magento uses the EAV model to store customer and product data. This enables these objects to be incredibly extensible, but results in longer SQL queries and more reads. Enabling the Flat Catalog for Categories and Products merges product data into one table, thereby improving performance. Generally, all stores should enable Flat Catalog for Categories. Stores with over 1000 products should enable Flat Catalog for Products.
- In the Magento Admin, go to System > Configuration > Catalog.
- Under "Frontend", change "Use Flat Catalog Category" to YES.
- Under "Frontend", change "Use Flat Catalog Product" to YES. (optional)
- Clear the cache.
Enable the Magento Compiler
Magento's application files are searched for in the following order:
- app/code/local
- app/code/community
- app/code/core
- lib
This search is performed for every page load, every time, resulting in a lot of filesystem reads. The Mage_Compiler reduces the number of reads by copying all of the application files to a single include directory. It also caches the most frequently used pages.
- In the Magento Admin, go to System > Tools > Compilation.
- Click "Run Compilation Process"
Other Performance Tweaks
Parallelize Downloads
Most browsers limit the number of concurrent connections to a domain to four. If your page has a lot of components coming from the same domain, this can result in a longer page load time. You can trick the browser into grabbing more components by using different subdomains for static components. This is as simple as creating pointer domains in Siteworx. However, due to the way that Nexcess configures the subdomain logic in the Vhost file, an additional modification is necessary to make this work on our servers.
- Create Pointer domains in Siteworx.
- This can be a single "static.example.com", or separate "js.example.com", "media.example.com", and "skin.example.com" domains.
- Edit the Vhost file so that apache doesn't try to load the sub-directories ../media, ../skin, or ../js, but rather the web root itself. Directly below the following lines:
NOTE: If you are on a Managed or Shared server, please open a ticket with support@nexcess.net for assistance with this.
# subdomain logic RewriteEngine On RewriteOptions inherit RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] RewriteCond %{HTTP_HOST} !^example\.com [NC] Add: RewriteCond %{HTTP_HOST} !^js\.example\.com [NC] RewriteCond %{HTTP_HOST} !^media\.example\.com [NC] RewriteCond %{HTTP_HOST} !^skin\.example\.com [NC] - Save the file and restart Apache.
- Clear the cache and reload the page to make sure the static content is coming from the new URLs.
Clean the Database
Magento's database can quickly become overgrown and sluggish due to unmaintained log tabes. Please use the following guide to clean up the Magento database:

