Magento the nice Community Version available e-commerce platform that we are using at Skywire for a number of our client builds is incredibly feature rich, but with all of these features comes the trade-off that to get any kind of speed out of the system you either need SERIOUS server hardware, or an awful lot of performance tuning.
To be honest it can run like a real dog if you don’t really work at it!
Well we like to make things work hard at Skywire so went on a journey of discovery on how to make Magento fly, and here’s our understandings to share with everyone else.
1. Server software selection and tuning
Lots of articles out there about this around the web, but you can sum it up in a few points really.
– What webserver (Apache vs. Lighttpd vs. Nginx) and how many threads for that webserver you need. Interestingly, against every article out there, Apache 2 was faster for us that Lighttpd and NginX but I think this was to do with the PHP CGI access the other two were using being slower on our Media Temple server
– Fine tune your mySQL database – we found that the two great scripts mysqlreport and mysqltuner are your friends here
– Get rid of any other processes you don’t need that get in the way (xinetd, spam assassin etc.)
2. Turn on lots of Caching
Magento has caching so turn that on for starts, and then get a minify type plugin (there’s lots of them out there but ) to complement that and join all of your CSS and JS into a single compressed file.
Install a PHP Byte Code caching system to cache any code generated by PHP – we used XCache as it was available via yum but eAccellerator gets good reviews too [although it just hung in our environment].
3. Turn on the Page Compilation feature in Magento!
Yes, I know it’s labelled as Beta, and yes I know it falls over most of the time you run it, but if you run it from the command line, as the same user that owns your web files then it works just great creating a new single directory in /includes/src containing flattened files of all your Magento files with the naming format directory_directory_etc_filename.php
This shaved at least 1 second off of every page load for us (amazing but true) however was a job to install as it ignores any modules installed in /app/code/community.
No worries though, you can work around this by just copying the whole module directory to the /app/code/local directory and rerunning the compiler and then it works great.
4. Load you Magento cache directories into a memory filesystem
Sounds a strange thing to do but you can load your
Summary:
So once you’ve done this on a mid-spec Media Temple DV server you can reduce page times from about 10 seconds down to just over a second, which believe me seems fast compared to how clunky Magento can be when running. Have fun!
References:
Magento performance and optimization
http://www.magentocommerce.com/group/view/168/
How do I use the inbuilt magento profiler to see bottlenecks?
http://www.magentocommerce.com/group/blog/action/viewpost/1405/group/168/
Magento Compiler – Improve your performance
http://www.magentocommerce.com/group/blog/action/viewpost/1243/group/168/
9 Methods to Speed Up Magento – A Guide to Making Magento Faster
http://www.blastedthing.com/magento/questions/mag-9-methods-to-speed-up-magento-a-guide-to-making-magento-faster/
Magento performance hosting
http://yoast.com/magento-performance-hosting/
Magento Site Performance Optimization
http://www.yireo.com/tutorials/magento/magento-spo#compress-output-in-general
Performance is Key! – Notes on Magento’s Performance
http://www.magentocommerce.com/blog/comments/performance-is-key-notes-on-magentos-performance/