A complete guide of optimizing Magento performance systematically, including LAMP(Linux, Apache, MySQL, PHP) optimization, tuning inside Magento and useful tools.
3. Donald Knuth says “Premature optimization is the
root of all evil”
... so choose the right time to start your optimization
Performance optimization is an ever going task
… so don’t think your optimization is “once for all”,
keep identifying the bottleneck of your site and
make improvement little by little
4.
5. Server side Network/HTTP Browser
Process your page Transfer your Render your page
as quickly as content as quickly as quickly as
possible as possible possible
Performance optimization
6. #1: Make Fewer HTTP Requests
#2: Use a Content Delivery Network
#3: Add an Expires Header
#4: Gzip Components
#5: Put Stylesheets at the Top
#6: Put Scripts at the Bottom
#7: Avoid CSS Expressions
#8: Make JavaScript and CSS External
#9: Reduce DNS Lookups
#10: Minify JavaScript
#11: Avoid Redirects
#12: Remove Duplicate Scripts
#13: Configure Etags
#14: Make AJAX Cacheable
---- High Performance Web Sites by Steve Souders
7.
8. Install a minimal Linux distribution with necessary
packages only, get rid of GUI, X-window etc.
Stop and disable the unused services, e.g. cups
Tweak kernel parameters:
# echo '8192' > /proc/sys/fs/file-max
# echo '32768' > /proc/sys/fs/inode-max
# echo 268435456 >/proc/sys/kernel/shmall
# echo 268435456 >/proc/sys/kernel/shmmax
# ulimit -n 4096
9. Compile required modules statically instead of
DSO(Dynamic Shared Object), and disabled useless
modules
./configure --prefix=/usr/local/apache2 --disable-
status --disable-userdir --disable-threads --disable-
ipv6 --enable-modules='ssl so rewrite deflate headers
expires'
Why? http://httpd.apache.org/docs/2.2/dso.html#advantages
“DSO has the following disadvantages”
10. Open .htaccess under Magento root directory,
uncomment the directives between “<IfModule
mod_deflate.c>” and “</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</IfModule>
11. Open .htaccess and use following lines to replace the
section between “<IfModule mod_expires.c>” and
“</IfModule>”
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType text/html "access plus 1 month"
ExpiresByType text/plain "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>
12. Open .httaccess and scroll to the end, uncomment the
directive “FileETag none”, also add several lines more if
you haven’t enabled KeepAlive in httpd.conf
FileETag None
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5
13. Open your my.cnf and update the following
parameters:
skip-name-resolve
innodb_buffer_pool_size=768M
innodb_flush_log_at_trx_commit=2
As time goes by, use Tuning Primer to check your
MySQL status and adjust configuration accordingly
15. Download latest stable version from eaccelerator.net
Compile by enabling Shared Memory(for Magento
cache, will talk about this later)
./configure --with-eaccelerator-shared-memory
--enable-eaccelerator=shared --with-php-
config=/usr/local/php/bin/php-config
17. A lightweight LAMP stack which can boost your
website performance maximally
A fast-enough environment to run Magento efficiently
Let’s move to Magento box!
20. Go to Magento Admin Panel System Cache
Management
All Cache Enable
Layered Navigation Yes
Admin Panel System Configuration Catalog
Frontend
Use Flat Catalog Category Yes
Use Flat Catalog Product Yes
21. Open {Magento_root}/app/etc/local.xml, add the
following three lines
...
</resources>
<session_save><![CDATA[files]]></session_save>
<cache>
<backend>eaccelerator</backend>
</cache>
</global>
...
22. Admin Panel System Tools Compilation
Run Compilation Process
24. Set up the following separate domains and point the
VirtualHost DocumentRoot to corresponding paths
under Magento folder
js.foo.com {Magento_root}/js
media.foo.com {Magento_root}/media
skin.foo.com {Magento_root}/skin
Then go to Admin Panel System Configuration
Website Unsecure, and configure the Basic URLs
accordingly
25. Make Fewer HTTP Requests
Put Stylesheets at the Top
Make JavaScript and CSS External
Reduce DNS Lookups
Minify JavaScript
26. Make Fewer HTTP Requests
Add an Expires Header
Gzip Components
Put Stylesheets at the Top
Avoid CSS Expressions (applies by default)
Make JavaScript and CSS External
Reduce DNS Lookups
Minify JavaScript
Avoid Redirects (applies by default)
Remove Duplicate Scripts (applies by default)
Configure Etags
Make AJAX Cacheable (applies by default)
You’ve made 12/14! That’s GREAT enough for a site at
the beginning, agree?