Improving Drupal’s page loading performance

Wim Leers ~ http://wimleers.com/

Drupal.org, IRC, Twitter, LinkedIn: wimleers
Overview
Overview

• Reasons

  • Why does it matter?

  • What is it?

  • Why is it important to Drupal?
Overview

• Reasons

  • Why does it matter?

  • What is it?

  • Why is it important to Drupal?

• Toolbox

  • Cuzillio...
Overview

• Reasons                            • Drupal + YSlow

  • Why does it matter?                • The Good

  • Wh...
Overview

• Reasons                            • Drupal + YSlow

  • Why does it matter?                • The Good

  • Wh...
Overview

• Reasons                            • Drupal + YSlow

  • Why does it matter?                • The Good

  • Wh...
Overview

• Reasons                            • Drupal + YSlow

  • Why does it matter?                • The Good

  • Wh...
Why does it matter?

• Users care about performance!

     • Amazon: 100 ms of extra load time caused a 1% drop in sales

...
What is it?

• End user response time                  HTML   Components


   • 10-20%: the HTML document
     (mix of bac...
Terminology: page loading performance




 page loading or front-end performance: the time it takes to
 load a web page an...
Why is it important to Drupal?
Why is it important to Drupal?

• The Drupal Experience: happier users (and developers)
Why is it important to Drupal?

• The Drupal Experience: happier users (and developers)

• Drupal’s numbers

  • Big, high...
Why is it important to Drupal?

• The Drupal Experience: happier users (and developers)

• Drupal’s numbers

   • Big, hig...
Toolbox

1. Cuzillion: for understanding browser behavior better (learning)
Toolbox

1. Cuzillion: for understanding browser behavior better (learning)

2. Hammerhead: while developing (basic profili...
Toolbox

1. Cuzillion: for understanding browser behavior better (learning)

2. Hammerhead: while developing (basic profili...
Toolbox

1. Cuzillion: for understanding browser behavior better (learning)

2. Hammerhead: while developing (basic profili...
Toolbox: 1. Cuzillion

 Tool for quickly constructing web pages to see how components interact
Toolbox: 2. Hammerhead

• Firebug extension


• Makes it easier to stay aware of page loading performance while developing
Toolbox: 3. YSlow

 Checks how well a page implements 14 basic rules (actually 34)
Toolbox: 4. Jiffy

• Raison d’être: 3rd-party    • Jiffy, on the other hand:
  performance monitoring
  systems (Gomez, Ke...
Terminology: CDN




 A content delivery network (CDN) is a collection of web servers distributed
 across multiple locatio...
Drupal + YSlow: things to keep in mind
Drupal + YSlow: things to keep in mind

• YSlow score does not necessarily reflect real-world performance, e.g.:


  • Usin...
Drupal + YSlow: things to keep in mind

• YSlow score does not necessarily reflect real-world performance, e.g.:


   • Usi...
Drupal + YSlow: The Good

• Conform to YSlow rules through:
Drupal + YSlow: The Good

• Conform to YSlow rules through:


  • Doing nothing :)
Drupal + YSlow: The Good

• Conform to YSlow rules through:


  • Doing nothing :)


  • Very simple Drupal core configurat...
Drupal + YSlow: The Good

• Rule 1: Make fewer HTTP requests




• Remarks

  • Problem: “dumb bundling” of CSS/JS files (s...
Default   CSS aggregation   CSS/JS aggregation
Drupal + YSlow: The Good

• Rule 3: Add an Expires header




• Rule 4: Gzip components




• Rule 5: Put CSS at the top
Drupal + YSlow: The Good

• Rule 6: Put JS at the bottom




• Rule 7: Avoid CSS expressions




• Rule 8: Make JS and CSS...
Drupal + YSlow: The Good

• Rule 9: Reduce DNS lookups




• Remarks

  • External JS (e.g. Google Analytics) should be ca...
Drupal + YSlow: The Good

• Rule 11: Avoid Redirects




• Rule 12: Remove Duplicate Scripts
Drupal + YSlow: The Easy Fixes

• Conform to YSlow rules through:
Drupal + YSlow: The Easy Fixes

• Conform to YSlow rules through:


  • Modules
Drupal + YSlow: The Easy Fixes

• Conform to YSlow rules through:


  • Modules


  • Drupal core/module configuration
Drupal + YSlow: The Easy Fixes

• Conform to YSlow rules through:


  • Modules


  • Drupal core/module configuration


  ...
Drupal + YSlow: The Easy Fixes

• Rule 1: Make fewer HTTP requests




• How to fix?

  • Intelligent bundling of CSS/JS fil...
Drupal + YSlow: The Easy Fixes

• Rule 4: Gzip components




• How to fix?

  • Apache 2: edit your .htacces/httpd.conf
  ...
Drupal + YSlow: The Easy Fixes

• Rule 10: Minify JavaScript




• Remarks

  • Use JSMIN, not Packer!

• How to fix?

  • ...
Drupal + YSlow: The Hard Problems
Drupal + YSlow: The Hard Problems

• Rule 2: Use a CDN




• The Tricky Thing

   • Far future Expires headers are more ef...
Drupal + YSlow: The Hard Problems

• Rule 6: Put JS at the bottom




• The Tricky Thing

   • JS that affects the style o...
Drupal + YSlow: The Hard Problems

• Rule 14: Make AJAX Cacheable




• Remarks

  • Possible today, but structured approa...
Drupal + YSlow: recap

• Many things are already good out-of-the-box

• Easy fixes

  • Intelligent bundling of CSS/JS

  •...
Other optimizations

• Image optimization! (PNG-8, PNG instead of GIF, progressive JPEG …)


• Prefetching (part of the HT...
Bachelor thesis

 I’ll solve 2 of the 3 hard problems: CDN integration and JS at the bottom.



 Hasselt University has al...
Bachelor thesis: JS at the bottom

• Not enough work/too easy for an entire bachelor thesis


• Will be a core patch


• C...
Bachelor thesis: CDN integration

• Plenty of work for a bachelor thesis

• 3 parts

   1. Daemon for synchronization, wri...
Bachelor thesis: CDN integration

• Daemon goals

  • Ability to use any CDN transparently (FTP, rsync, Amazon S3 …)

  • ...
Bachelor thesis: collaborating companies

 The following Drupal companies       The following CDN companies
 will be evalu...
Questions?


 Relevant links:


  • This presentation – along with relevant links – can be found online at
    http://wiml...
Fosdem 2009 – improving drupal's page loading performance
Fosdem 2009 – improving drupal's page loading performance
Fosdem 2009 – improving drupal's page loading performance
Fosdem 2009 – improving drupal's page loading performance
Fosdem 2009 – improving drupal's page loading performance
Fosdem 2009 – improving drupal's page loading performance
Upcoming SlideShare
Loading in …5
×

Fosdem 2009 – improving drupal's page loading performance

1,528 views

Published on

Published in: Technology, Design
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,528
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Student at Hasselt University
    Freelance Drupal developer
    Intern at Mollom









  • Popularity numbers: d.o usage statistics

    Conclusion: important for:
    - Drupal project growth
    - More Happy People
  • Popularity numbers: d.o usage statistics

    Conclusion: important for:
    - Drupal project growth
    - More Happy People
  • Popularity numbers: d.o usage statistics

    Conclusion: important for:
    - Drupal project growth
    - More Happy People





  • Create a simple test: the effect of an inline script between 2 images in different browsers.
    Webkit: executes script, then displays images
    Firefox: displays first image, executes script, displays second image

  • Notice how both images finish loading at the same time.
  • Notice how the second image finishes loading about 2 seconds after the first one.

  • I’ll only cover the 14 that were first published
  • - Apache logs => database (script on cron) => reports
    - Mark (start timing) & measure (measure elapsed time) approach
    - June 2008






  • - dumb bundling reduces the effectiveness of aggregation



  • script downloading? -> no other downloads are started, not even from other domain names
    == blocks parallel downloads









  • - Packer:
    * typically higher compression ratio, but:
    * adds a decompression delay on every page load!


  • script downloading? -> no other downloads are started, not even from other domain names
    == blocks parallel downloads









  • Fosdem 2009 – improving drupal's page loading performance

    1. 1. Improving Drupal’s page loading performance Wim Leers ~ http://wimleers.com/ Drupal.org, IRC, Twitter, LinkedIn: wimleers
    2. 2. Overview
    3. 3. Overview • Reasons • Why does it matter? • What is it? • Why is it important to Drupal?
    4. 4. Overview • Reasons • Why does it matter? • What is it? • Why is it important to Drupal? • Toolbox • Cuzillion • Hammerhead • YSlow • Jiffy
    5. 5. Overview • Reasons • Drupal + YSlow • Why does it matter? • The Good • What is it? • The Easy Fixes • Why is it important to Drupal? • The Hard Problems • Toolbox • Cuzillion • Hammerhead • YSlow • Jiffy
    6. 6. Overview • Reasons • Drupal + YSlow • Why does it matter? • The Good • What is it? • The Easy Fixes • Why is it important to Drupal? • The Hard Problems • Toolbox • Other optimizations • Cuzillion • Hammerhead • YSlow • Jiffy
    7. 7. Overview • Reasons • Drupal + YSlow • Why does it matter? • The Good • What is it? • The Easy Fixes • Why is it important to Drupal? • The Hard Problems • Toolbox • Other optimizations • Cuzillion • Bachelor thesis • Hammerhead • JS at the bottom • YSlow • CDN integration • Jiffy
    8. 8. Overview • Reasons • Drupal + YSlow • Why does it matter? • The Good • What is it? • The Easy Fixes • Why is it important to Drupal? • The Hard Problems • Toolbox • Other optimizations • Cuzillion • Bachelor thesis • Hammerhead • JS at the bottom • YSlow • CDN integration • Jiffy • Questions?
    9. 9. Why does it matter? • Users care about performance! • Amazon: 100 ms of extra load time caused a 1% drop in sales • Google: 500 ms of extra load time caused 20% fewer searches • Fast web sites are rewarded, slow web sites are punished source: http://www.slideshare.net/stubbornella/designing-fast-websites-presentation
    10. 10. What is it? • End user response time HTML Components • 10-20%: the HTML document (mix of back-end + front-end) 90% • 80-90%: the components in the page (front-end only) • More effective to focus on front-end 10% performance! source: http://stevesouders.com/hpws/
    11. 11. Terminology: page loading performance page loading or front-end performance: the time it takes to load a web page and all its components (CSS, JS, images …) includes page rendering or back-end performance: the time the server needs to render a web page
    12. 12. Why is it important to Drupal?
    13. 13. Why is it important to Drupal? • The Drupal Experience: happier users (and developers)
    14. 14. Why is it important to Drupal? • The Drupal Experience: happier users (and developers) • Drupal’s numbers • Big, high-traffic web sites • Popular (>125,000 sites): optimization affects many sites
    15. 15. Why is it important to Drupal? • The Drupal Experience: happier users (and developers) • Drupal’s numbers • Big, high-traffic web sites • Popular (>125,000 sites): optimization affects many sites • Drupal is international (thanks to i18n/L10n) • International audiences: high network latencies • Developing countries: low-speed connections
    16. 16. Toolbox 1. Cuzillion: for understanding browser behavior better (learning)
    17. 17. Toolbox 1. Cuzillion: for understanding browser behavior better (learning) 2. Hammerhead: while developing (basic profiling/awareness)
    18. 18. Toolbox 1. Cuzillion: for understanding browser behavior better (learning) 2. Hammerhead: while developing (basic profiling/awareness) 3. YSlow: while improving page loading performance (detailed profiling)
    19. 19. Toolbox 1. Cuzillion: for understanding browser behavior better (learning) 2. Hammerhead: while developing (basic profiling/awareness) 3. YSlow: while improving page loading performance (detailed profiling) 4. Jiffy: for measuring real-world page loading performance (big scale profiling)
    20. 20. Toolbox: 1. Cuzillion Tool for quickly constructing web pages to see how components interact
    21. 21. Toolbox: 2. Hammerhead • Firebug extension • Makes it easier to stay aware of page loading performance while developing
    22. 22. Toolbox: 3. YSlow Checks how well a page implements 14 basic rules (actually 34)
    23. 23. Toolbox: 4. Jiffy • Raison d’être: 3rd-party • Jiffy, on the other hand: performance monitoring systems (Gomez, Keynote): • Limited number of • Can measure every page load if desired measurement points • Runs in the browser: it’s JS code • Real-world browsers • No real-world browsers used • Can measure anything • Paid • Open source! Jiffy.mark("slow3PStart"); jQuery.getScript(‘http://slowsite.com/slow.js’); Jiffy.measure("slow3PDone", "slow3PStart");
    24. 24. Terminology: CDN A content delivery network (CDN) is a collection of web servers distributed across multiple locations to deliver content more efficiently to users. The server selected for delivering content to a specific user is typically based on a measure of network proximity. source: http://developer.yahoo.com/performance/rules.html#cdn
    25. 25. Drupal + YSlow: things to keep in mind
    26. 26. Drupal + YSlow: things to keep in mind • YSlow score does not necessarily reflect real-world performance, e.g.: • Using a CDN, but a slow or non-global one
    27. 27. Drupal + YSlow: things to keep in mind • YSlow score does not necessarily reflect real-world performance, e.g.: • Using a CDN, but a slow or non-global one • Striving to a perfect YSlow score is good • Especially in Drupal core: affects many sites and developers • But don’t forget to check real-world performance!
    28. 28. Drupal + YSlow: The Good • Conform to YSlow rules through:
    29. 29. Drupal + YSlow: The Good • Conform to YSlow rules through: • Doing nothing :)
    30. 30. Drupal + YSlow: The Good • Conform to YSlow rules through: • Doing nothing :) • Very simple Drupal core configuration changes
    31. 31. Drupal + YSlow: The Good • Rule 1: Make fewer HTTP requests • Remarks • Problem: “dumb bundling” of CSS/JS files (see later) • How to enable? • Enable at admin/settings/performance
    32. 32. Default CSS aggregation CSS/JS aggregation
    33. 33. Drupal + YSlow: The Good • Rule 3: Add an Expires header • Rule 4: Gzip components • Rule 5: Put CSS at the top
    34. 34. Drupal + YSlow: The Good • Rule 6: Put JS at the bottom • Rule 7: Avoid CSS expressions • Rule 8: Make JS and CSS external
    35. 35. Drupal + YSlow: The Good • Rule 9: Reduce DNS lookups • Remarks • External JS (e.g. Google Analytics) should be cached on your server • How to enable? • Proper setting in Google Analytics module • Hacking other modules?
    36. 36. Drupal + YSlow: The Good • Rule 11: Avoid Redirects • Rule 12: Remove Duplicate Scripts
    37. 37. Drupal + YSlow: The Easy Fixes • Conform to YSlow rules through:
    38. 38. Drupal + YSlow: The Easy Fixes • Conform to YSlow rules through: • Modules
    39. 39. Drupal + YSlow: The Easy Fixes • Conform to YSlow rules through: • Modules • Drupal core/module configuration
    40. 40. Drupal + YSlow: The Easy Fixes • Conform to YSlow rules through: • Modules • Drupal core/module configuration • Web server configuration
    41. 41. Drupal + YSlow: The Easy Fixes • Rule 1: Make fewer HTTP requests • How to fix? • Intelligent bundling of CSS/JS files: Support file Cache module (Drupal 5 only)
    42. 42. Drupal + YSlow: The Easy Fixes • Rule 4: Gzip components • How to fix? • Apache 2: edit your .htacces/httpd.conf AddOutputFilterByType DEFLATE text/css application/x-javascript • Use a CDN • Drupal 7: core patch?
    43. 43. Drupal + YSlow: The Easy Fixes • Rule 10: Minify JavaScript • Remarks • Use JSMIN, not Packer! • How to fix? • Javascript Aggregator module (Drupal 5 & 6)
    44. 44. Drupal + YSlow: The Hard Problems
    45. 45. Drupal + YSlow: The Hard Problems • Rule 2: Use a CDN • The Tricky Thing • Far future Expires headers are more effective, but require unique filenames • How to fix? • Drupal core patch: file_url() • CDN integration module
    46. 46. Drupal + YSlow: The Hard Problems • Rule 6: Put JS at the bottom • The Tricky Thing • JS that affects the style of a web page cannot be at the bottom • How to fix? • Manual hacks :( • Drupal core patch necessary to change default location (see later)
    47. 47. Drupal + YSlow: The Hard Problems • Rule 14: Make AJAX Cacheable • Remarks • Possible today, but structured approach would be better • How to fix? • Drupal 7 will support multiple rendering formats! • Gzip-ability should be a follow-up patch
    48. 48. Drupal + YSlow: recap • Many things are already good out-of-the-box • Easy fixes • Intelligent bundling of CSS/JS • Gzipping components • JS minification • Hard problems • Using a CDN • Putting JS at the bottom • Make AJAX cacheable
    49. 49. Other optimizations • Image optimization! (PNG-8, PNG instead of GIF, progressive JPEG …) • Prefetching (part of the HTML5 specification) <link rel="prefetch" href="/images/big.jpeg"> • The 20 new rules (post- and pre-load components, flush the buffer early …) •…
    50. 50. Bachelor thesis I’ll solve 2 of the 3 hard problems: CDN integration and JS at the bottom. Hasselt University has allowed me to work in an open source fashion and all of my work will therefor be available for everybody. Thanks! My promotor will be Prof. dr. Wim Lamotte and I will be guided by Stijn Agten and Maarten Wijnants.
    51. 51. Bachelor thesis: JS at the bottom • Not enough work/too easy for an entire bachelor thesis • Will be a core patch • Change the default location to “footer” • Clear guidelines on how to separate “style JS” from “non-style JS”
    52. 52. Bachelor thesis: CDN integration • Plenty of work for a bachelor thesis • 3 parts 1. Daemon for synchronization, written in Python (back-end) 2. Drupal core patch to unify generation of file URLs and allow to alter them 3. Drupal module for administration and reporting (front-end)
    53. 53. Bachelor thesis: CDN integration • Daemon goals • Ability to use any CDN transparently (FTP, rsync, Amazon S3 …) • Ability to mix CDNs and static file servers • Post-processing: image optimization, CSS/JS compression … transcoding? • Detect files instantly through file system event monitor (inotify on Linux) • Other use cases: backup system, automatically sharing files within LAN …
    54. 54. Bachelor thesis: collaborating companies The following Drupal companies The following CDN companies will be evaluating my work and will be providing their services giving feedback. for free for testing purposes. A big thanks to all of them!
    55. 55. Questions? Relevant links: • This presentation – along with relevant links – can be found online at http://wimleers.com/talk/fosdem-2009 • You can track my bachelor thesis’ progress at http://wimleers.com/tags/bachelor-thesis • Questions & feedback are welcome! Contact me via http://wimleers.com/contact

    ×