Speed up Magento
Here are some top tips to make magento fly
Please note this page is now depreciated as of 1st Oct 2015
All of the server work is done by us for our clients, as standard we use Xcache, Nginx and Litespeed
- Get a SSD dedicated server Or SafeCloud VPS
- Host your site in the country where your customers are.
- Don’t host files on your web server that you do not use, large or small.
- Goto MySQL Admin and select all the tables and repair and then optimize them.
- Use Xcache.
- Only install necessary Apache modules.
- Use Apache mod_expires and be sure to set how long files should be cached. You could use the example below for your Apache virtualhost config:
# Turn on Expires and set default to 0 ExpiresActive On ExpiresDefault A0 # Set up caching on media files for 1 year (forever?) ExpiresDefault A29030400 Header append Cache-Control "public" # Set up caching on media files for 2 weeks ExpiresDefault A1209600 Header append Cache-Control "public" # Set up 1 week caching on commonly updated files ExpiresDefault A604800 Header append Cache-Control "proxy-revalidate" # Force no caching for dynamic files ExpiresActive Off Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform" Header set Pragma "no-cache"
- Enable Gzip Compression in htaccess.
- Compress output, use zlib.output_compression or mod_deflate.
- Use a Content Delivery Network (CDN) for parallel transfer of static content. There is a Magento extension that can help you do this with category and product images: the One Pica Image CDN. But… (see next tip).
- Don’t use too many different external sources (for images, iframes, (twitter)feeds etc.) because every DNS lookup takes extra time.
- Minimize redirects.
- Make your output W3C compliant. Errors slow down the browser.
- Swap Apache for NginX or Litespeed. If this isn’t an option, then go for Zend Server (ideally the non-CE version so you can use full page caching).
- Turn off or at least reduce web server logging (reduces disk writes).
- Disable Access Time Logging. Magento Wiki: For Linux servers, if you have access-time logging enabled on any of your mysql, web server or cache partitions, try turning it off for a performance boost. If you’re using ext3 or reiserfs there may be faster journal write methods you can use. For more info see Linux.com.
- Compile MySQL from source instead of your OS’s package manager.
- Always upgrade to the latest Magento version. Not only will you get more features and bug- and security fixes, but with every update Magento performs better.
- Query Cach size: Magento Blog: Modify the configuration for your MySQL server to take better advantage of your server’s RAM. Most Linux distributions provide a conservative MySQL package out of the box to ensure it will run on a wide array of hardware configurations. If you have ample RAM (eg, 1gb or more), then you may want to try tweaking the configuration. An example my.cnf is below, though you will want to consult the MySQL documentation for a complete list of configuration directives and recommended settings.
- set ‘php_value memory_limit 128M’ in your php configuration or add it to your .htaccess file to ensure you don’t run out of memory.
- Use a memory-based filesystem for dynamic data. If you store dynamic data (var/cache, var/session) on RAMdisk or tmpfs, the disk I/O is decreased.
- Change realpath_cache_size in php.ini.
realpath_cache_size=1M (careful, this is per apache process)
realpath_cache_ttl=86400 (ok for production site)
- Memcache (for the hardcore) is documented inhttp://www.magentocommerce.com/boards/viewthread/9037/ and more tips from http://alexle.net/archives/275 to get you up and running.
- Disable the PHP open_basedir directive.
- Eliminate directory structure scans for .htaccess files.
- Recommended innodb_buffer_pool_size.
- Combined web and db server, 6 GB RAM: 2-3 GB
- Dedicated database server, 6GB RAM: 5 GB
- Dedicated database server, 12 GB RAM: 10 GB
- 2 * [numberofCPUs] + 2
- Query Cach: query_cache_size: 64MB, query_cache_limit: 2MB
- Use sa seperate backend server to handle admin users, process backend activity (cron), pre generate full page caching and to handle media queries.
- Use multiple web nodes (frontend servers) to handle browsing and checkout.
- Use Varnish reverse proxy caching, Magento explanation by@alistairstead: Varnish your Magento store, make it fly!.
- Optimize all your (template) images- Most if not all should be at least below 10kb.
- Crop the white space using your image editor.
- Use PNG8 Files or GIF files rather than Jpegs and don’t use transparency (depending on how many colors you use and how large the image is, but try for yourself).
- Scale images: make images in the dimensions you need and not resizing them in the editor.
- Use image compression (you can use smush.it to do it for you).
- Use CSS Sprites, there even are CSS Sprite Generators.
- Minify your Css, remove unused code.
- Use a lightweight template as a basis for your template. For example: the Yoast Blank SEO theme.
- Specify Image dimensions.
- Use Block cache and HTML output in your extensions.
- Uninstall any extensions that you don’t actually use.
- Disable modules that you don’t use: System -> Configuration -> Advanced -> Advanced
- Enable all Magento Caches: System -> Cache Management.
- Try some of the Magento performance extensions.
- Enable the Magento Flat Catalog, only helpful for very large catalogs to feel the improvements.
- Don’t use layered navigation if you don’t really need it, it’s resource intensive.
- Use Magento’s Compilation feature. It’s reported to give you a 25%-50% performance boost: System > Tools > Compilation.
Edit: Yoav Kutner (Magento CTO) let me know that “in later versions since we optimized the catalog EAV, Magento Compilation is not really needed if you have byte code caching and if it is configured correctly“.
- Use the correct session storage, choose file system or database (during setup). Most installations should use “file system” because it’s faster and doesn’t cause the database to grow. But if your site will run on multiple servers, you should select “database” so that a user’s session data is available regardless of which server his/her request is served from. More info about this from Ashley Schroderat Magebase.com.
- Limit the number of products on a product overview page.
- Set only those attribute frontend properties to ‘Yes’ that you’re actually going to use. Set all other to ‘No’. Don’t use in quick search, advanced search compare, etc etc.: Catalog -> Attributes -> Manage Atributes -> Frontend Properties.
- Disable the Magento log: System -> Configuration -> Advanced -> Developer -> Log Settings (default is disabled).
- Test your Magento site with Speed test for Magento (by Ashley Schroder)
- Run your site through websiteoptimization.com.
- Use Google Page Speed Firefox extension or Yahoo Yslow for some tips from Google and Yahoo.
- Implement Google Speed measurements in Analytics: Measure Page Load Time with Site Speed Analytics Report
- Speed monitoring and downtime alerts.