Template tuning
for high performance


                           Chris Davenport




          Website performance optimisation
           for Joomla template developers
About me



Joomla Leadership Team
Production Working Group
Documentation Coordinator


Web developer
Clickingmad Limited
www.clickingmad.com
Quick overview


Template tuning for high performance:
Optimisation for Joomla template developers
(not looking at things like PHP, SQL or server optimisation)


    Tools to measure performance

    Optimising JavaScript

    Optimising CSS

    Optimising images

    Optimisation process
Performance matters




+500 ms   -20% traffic     @ Google
+100 ms   -1% sales       @ Amazon
Google takes site speed into account
What tools should you use?

You can't manage control what you can't measure



                +
Using the Firebug Net Panel
Using YSlow




http://developer.yahoo.com/yslow/
Web page timeline
                                     c. 20%    c. 80%




                                              80% of the time to render a page
                                               is waiting for files to download


This is the only time where
Joomla Is directly involved
Anatomy of a single request



                            Where is www.joomla.org?
                                   Cached                       DNS server
                                206.123.111.172
User's web browser




                     Opens TCP connectionre-used
                              Connection to 206.123.111.172




                        Request resource: GET / HTTP/1.1
                                                                   Server
                                                                     at
                      Server sends requested resource back    206.123.111.172



                              Closes TCP connection
                              Connection re-used
So, why the staircase?
Optimising JavaScript
                       What's the problem?




                                              CSS


JavaScript

                                                    CSS




  JavaScript blocks other browser activity
Optimising JavaScript
         Parallel download limits




http://www.browserscope.org/
Optimising JavaScript
                       Older browsers have lower limits




Expect at least 25% of visitors to have
    low parallel download limits
Optimising JavaScript
                  Move JavaScript to the end




             JavaScript here




Moved here
Optimising JavaScript
Move JavaScript to the end
Optimising JavaScript
                   Use Google AJAX Libraries API




                                 Make sure you request
                                   the right version




http://code.google.com/apis/ajaxlibs/documentation/
Optimising JavaScript
                                        Remove unused JavaScript


   For example, if you don't need MooTools, remove it.




Note: This code can be placed anywhere in the template index.php to prevent MooTools from loading.
Optimising JavaScript
Minify JavaScript
Optimising JavaScript
                                 Minify and compress JavaScript


http://code.google.com/p/minify/
Download the Minify zip file

Extract into your template root directory

Set paths in min/config.php

Set up groups of files in min/groupsConfig.php
Optimising JavaScript
                                    Minify and compress JavaScript


Modify your template index.php




Note: Minify also sets far future expiry date headers
Optimising CSS



Move CSS to the head



Remove unnecessary CSS rules



Merge, minify and compress CSS files
    (Minify script used for JavaScript also supports CSS)


Consider using a Content Delivery Network (CDN)
Optimising CSS
Optimising images



Start downloading large images early


Merge and compress image files


Serve images from a cookie-free domain


Consider using a Content Delivery Network (CDN)
Optimising images
                                              Use CSS sprites



Sprites reduce the number of HTTP requests
Removes latency when applying hover effects
Optimising images
                            Generating CSS sprites



                                    http://spritegen.website-performance.org/


Upload zip file containing images




                                                  Open-source
                                                  Written in PHP
                                                  Can be run locally
Optimising images
Use Smush.it ™
Optimising images
Use Smush.it ™
Other Optimisations
Content Delivery Networks
Suggested optimisation process

At all times during development
    Keep CSS in the head and JavaScript in the tail

During final stages of site build
   Create CSS sprite images
   Update CSS to use the sprites and test
   Crush images
   Minify and compress CSS
     Update template index.php and test
   Minify and compress JavaScript
     Update template index.php and test

After site has gone live
   Evaluate, reflect and improve
Questions?
http://clickingmad.com
This presentation is available for use under the
      Joomla! Electronic Documentation License
             http://docs.joomla.org/JEDL




Copyright © 2010 Chris Davenport

Template tuning for high performance