3. Overview
• Reasons
• Why does it matter?
• What is it?
• Why is it important to Drupal?
4. Overview
• Reasons
• Why does it matter?
• What is it?
• Why is it important to Drupal?
• Toolbox
• Cuzillion
• Hammerhead
• YSlow
• Jiffy
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. 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. 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. 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. 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. 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. 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
13. Why is it important to Drupal?
• The Drupal Experience: happier users (and developers)
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. 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
17. Toolbox
1. Cuzillion: for understanding browser behavior better (learning)
2. Hammerhead: while developing (basic profiling/awareness)
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. 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. Toolbox: 1. Cuzillion
Tool for quickly constructing web pages to see how components interact
21.
22.
23.
24.
25. Toolbox: 2. Hammerhead
• Firebug extension
• Makes it easier to stay aware of page loading performance while developing
26. Toolbox: 3. YSlow
Checks how well a page implements 14 basic rules (actually 34)
27. 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");
28. 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
30. 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
31. 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!
33. Drupal + YSlow: The Good
• Conform to YSlow rules through:
• Doing nothing :)
34. Drupal + YSlow: The Good
• Conform to YSlow rules through:
• Doing nothing :)
• Very simple Drupal core configuration changes
35. 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
38. Drupal + YSlow: The Good
• Rule 3: Add an Expires header
• Rule 4: Gzip components
• Rule 5: Put CSS at the top
39. Drupal + YSlow: The Good
• Rule 6: Put JS at the bottom
• Rule 7: Avoid CSS expressions
• Rule 8: Make JS and CSS external
40. 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?
41.
42. Drupal + YSlow: The Good
• Rule 11: Avoid Redirects
• Rule 12: Remove Duplicate Scripts
43. Drupal + YSlow: The Easy Fixes
• Conform to YSlow rules through:
44. Drupal + YSlow: The Easy Fixes
• Conform to YSlow rules through:
• Modules
45. Drupal + YSlow: The Easy Fixes
• Conform to YSlow rules through:
• Modules
• Drupal core/module configuration
46. Drupal + YSlow: The Easy Fixes
• Conform to YSlow rules through:
• Modules
• Drupal core/module configuration
• Web server configuration
47. 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)
48. 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?
49. Drupal + YSlow: The Easy Fixes
• Rule 10: Minify JavaScript
• Remarks
• Use JSMIN, not Packer!
• How to fix?
• Javascript Aggregator module (Drupal 5 & 6)
51. 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
52. 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)
53. 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
54. 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
55. 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 …)
•…
56. 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.
57. 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”
58. 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)
59. 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 …
60. 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!
61. 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
Notas do Editor
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&#x2019;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