SlideShare a Scribd company logo
Front
    End
Performance
          Konstantin
          Käfer
Front End Performance
Render a usable version
      as early as possible.



3                             Konstantin Käfer
Firebug’s Net panel




4                         Konstantin Käfer
Waterfall graphs
              ‣   Visualizes load order
              ‣   Rules
                  – descend as fast as possible
                  – as shallow as possible
                  – as narrow as possible




5                                             Konstantin Käfer
YSlow
    ‣   Rates a webpage based on 13 criteria
    ‣   Determines overall load time
    ‣   Provides optimization suggestions
    ‣   Graphs, Numbers & Figures




6                                              Konstantin Käfer
YSlow




7           Konstantin Käfer
YSlow is not everything.



8                              Konstantin Käfer
Webpage Test
    ‣   Automated measurement using IE
    ‣   Shows when rendering starts
    ‣   Connection view:




        – http://webpagetest.org or local installation
9                                                        Konstantin Käfer
Other tools
     ‣   IBM Page Detailer
         http://www.alphaworks.ibm.com/tech/pagedetailer
     ‣   Pingdom
         http://tools.pingdom.com
     ‣   Episodes
         http://drupal.org/project/episodes
     ‣   Safari’s Web Inspector (Safari 4 and up)
     ‣   Web Debugging Proxies
         http://charlesproxy.com, http://fiddlertool.com
10                                                         Konstantin Käfer
Waterfall diagrams




     Start   Connect   First byte   Last byte
11                                     Konstantin Käfer
1. Reduce requests
     ‣   Every file produces an HTTP request
          60s

          45s

          30s                              Requests
                                           Size (KB)
          15s

           0s
                0   10     20     30


     ‣   Fewer requests is better than smaller size
     ‣   HTTP 1.1: 2 components per host in parallel
12                                                     Konstantin Käfer
1. Reduce requests
     ‣   Sprites
         – Many images into one file
         – Shift into view with background-position
     ‣   Aggregate scripts and styles
         – Built into Drupal
         – Sophisticated: http://drupal.org/project/sf_cache
     ‣   No redirects

13                                                             Konstantin Käfer
1. Reduce requests
     ‣   Caching (see 3.)
     ‣   Use CSS instead of images
             -moz-border-radius:4px;
             -webkit-border-radius: 4px;
             border-radius: 4px;

     ‣   data: URLs in style sheets
         –    url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAGXRFWHRTb2Z
             0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR9JREFUeNrEk02ORUAUhRVNJEgYsgdGbIHFsSGmhhjZAzFCR
             CLx906io3UROu8N+g7vPR9V95wi67oy79bXuTXP8zAMfdP48jzvCRJoihyHPcA4xRd1+V5HoZhmqZ1XWuaZ
             tu267qWZSmKQghhKGCrZVmqqgqCQNd16g/ooI8pNOuhfuC2bX3fFwTh8nroYwrNBTxNUxzHhmHcrAf/hwb
             KHWa3ATYURVFRFDdwWZbYBZR75xvGbpMkefQmyzIoaRiuNE3zCGP/UNIw/FRV9RGGBkoaRhLg5yPsOA6U
             tM/vbfuXz0jCjc+YXvu8JwxJOCcMJ9oShtgfYXJ8VedsY0O4p+d5pmnKssyy7PGj5Pwk//6qyCfvmWU+qP+DXw
             IMADReKA+zC0X8AAAAAElFTkSuQmCC);



14                                                                                         Konstantin Käfer
1. Reduce requests
     ‣   Data URLs in Internet Explorer < 8:
         – MHTML: http://www.phpied.com/mhtml-when-you-
           need-data-uris-in-ie7-and-under/
         – Include encoded images as Multipart HTML
         – url(mhtml:http://example.com/style.css!somestring);


         – Not a proven technology (fails on certain configs)




15                                                               Konstantin Käfer
2. Use a CDN
     ‣   Content Delivery Network
     ‣   Place servers near users to reduce ping time
     ‣   More on that in a bit




16                                                  Konstantin Käfer
3. Caching
                             ?
     Disabled:     Client                    Server
                    Cache

                                        Full response
                             ?
      Default:     Client                    Server
                            “Still fresh”
                    Cache
                                      Partial response

     Aggressive:   Client                    Server
                    Cache
17                                                Konstantin Käfer
3. Caching
     ‣   Controlled by HTTP headers
     ‣   Browsers check whether content is fresh
     ‣   Set Expires header to a date in the far future
         – <Location /css>
           	 ExpiresActive On
           	 ExpiresDefault "access plus 1 year"
           </Location>


     ‣   Drupal default: 2 weeks
     ‣   Change filenames/URLs when updating

18                                                   Konstantin Käfer
4. GZip
     ‣   Compress text content (don’t use for images!)
         – <IfModule mod_deflate.c>
           	 AddOutputFilterByType DEFLATE text/css application/x-javascript
           </IfModule>


     ‣   Vastly reduces page size (often halfs)
     ‣   Compress scripts and styles as well




19                                                                   Konstantin Käfer
5. CSS to the top
     ‣   == in <head>
     ‣   Page renders when all header CSS is loaded
     ‣   Loading CSS later causes re-rendering and
         Flash of Unstyled Content
     ‣   Use <link> instead of @import
         http://www.stevesouders.com/blog/2009/04/09/dont-use-import/




20                                                                      Konstantin Käfer
21                                               Konstantin Käfer




     ‣   == right before </body>
     ‣   Loading scripts blocks page rendering
     ‣   Scripts are loaded sequentially!
         (At least in most current browsers)

     ‣   Don’t use onfoo handlers in HTML code
     ‣   Graceful degradation


     6. Scripts to the bottom
7. Minify CSS and JS
     ‣   Remove comments and whitespace
     ‣   Still savings, even with GZip
     ‣   Drupal’s aggregator or sf_cache.module




22                                                Konstantin Käfer
8. Parallelization
     ‣   “A single-user client SHOULD NOT maintain
         more than 2 connections with any server
         or proxy.” (RFC 2616, 8.1.4)
     ‣   Use multiple host names ➔ higher
         parallelization
         (Don’t overdo it)
     ‣   Most current browsers use > 2 connections
     ‣   http://stevesouders.com/ua/


23                                                   Konstantin Käfer
8. Parallelization
     ‣   Ensure proper distribution
     ‣   Webpage Test graphs:




24                                    Konstantin Käfer
9. Reduce image weight
     ‣   OptiPNG, PNGCrush, ...
         – Removes invisible content by lossless recompression

     ‣   JPEGtran/ImageMagick: Lossless JPEG operations
         – Remove color profiles, meta data, …
     ‣   ImageOptim: Batch compression
     ‣   smushit.com – now integrated into YSlow
     ‣   punypng.com – supposedly more efficient

25                                                        Konstantin Käfer
10. Lazy initialization
     ‣   JavaScript takes time to initialize
         – Libraries such as jQuery also count
         – Defer setup work
     ‣   Only load content above the fold
         – jQuery plugin: http://bit.ly/NpZPn
         – Useful on image-heavy sites
     ‣   Don’t load invisible content (tabs) on page load

26                                                   Konstantin Käfer
11. Other optimizations
     ‣   “Premature optimization is the root of all evil”
                                                    —Donald Knuth

     ‣   Only if you have optimized everything else

     ‣   Strategies
         – Move components to cookieless host
         – Remove ETags
         – Load order (see http://stevesouders.com/cuzillion/)


27                                                           Konstantin Käfer
Render a usable version
       as early as possible.


           Konstantin Käfer
          mail@kkaefer.com — @kkaefer

28                                      Konstantin Käfer
Resources
     – High Performance Websites, Steve Souders, 2007.
     – http://stevesouders.com/examples/rules.php
     – http://developer.yahoo.com/performance/
     – http://yuiblog.com/blog/category/performance
     – http://sites.google.com/site/io/even-faster-web-sites
     – http://slideshare.net/jeresig/performance-improvements-
       in-browsers
     – http://www.stevesouders.com/blog/2009/04/09/dont-
       use-import/
29                                                             Konstantin Käfer

More Related Content

PPTX
Front end performance optimization
PDF
Front end performance tip
PPTX
The Need for Speed - SMX Sydney 2013
PDF
S314011 - Developing Composite Applications for the Cloud with Apache Tuscany
PDF
Tuning Web Performance
PDF
Developing High Performance Web Apps
PDF
Godefroid Chapelle Ajax With Plone 3 Kss Development Patterns
PDF
Progressive Downloads and Rendering
Front end performance optimization
Front end performance tip
The Need for Speed - SMX Sydney 2013
S314011 - Developing Composite Applications for the Cloud with Apache Tuscany
Tuning Web Performance
Developing High Performance Web Apps
Godefroid Chapelle Ajax With Plone 3 Kss Development Patterns
Progressive Downloads and Rendering

What's hot (20)

PDF
Use Xdebug to profile PHP
PDF
Pagespeed what, why, and how it works
PPT
A web perf dashboard up & running in 90 minutes presentation
PDF
HTML 5 - Overview
PDF
Build Better Responsive websites. Hrvoje Jurišić
PDF
BaláZs Ree Introduction To Kss, Kinetic Style Sheets
PPT
YSlow 2.0
PDF
HTML5: friend or foe (to Flash)?
PDF
How to investigate and recover from a security breach in WordPress
PPT
WordPress and Ajax
PPTX
Nodejs.meetup
PPTX
Liking performance
PDF
Building an HTML5 Video Player
PDF
AD1387: Outside The Box: Integrating with Non-Domino Apps using XPages and Ja...
PDF
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
ODP
Administer WordPress with WP-CLI
PDF
Scaling Drupal: Not IF... HOW
PDF
Web Page Test - Beyond the Basics
PDF
Os Pruett
PDF
Keypoints html5
Use Xdebug to profile PHP
Pagespeed what, why, and how it works
A web perf dashboard up & running in 90 minutes presentation
HTML 5 - Overview
Build Better Responsive websites. Hrvoje Jurišić
BaláZs Ree Introduction To Kss, Kinetic Style Sheets
YSlow 2.0
HTML5: friend or foe (to Flash)?
How to investigate and recover from a security breach in WordPress
WordPress and Ajax
Nodejs.meetup
Liking performance
Building an HTML5 Video Player
AD1387: Outside The Box: Integrating with Non-Domino Apps using XPages and Ja...
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Administer WordPress with WP-CLI
Scaling Drupal: Not IF... HOW
Web Page Test - Beyond the Basics
Os Pruett
Keypoints html5
Ad

Viewers also liked (11)

PDF
Developing JavaScript Widgets
PDF
Front End Performance
PDF
Instant Dynamic Forms with #states
PDF
Front End Performance
PDF
Stats stif-transports-idf-janvier-2016-2
PDF
PPT
Web performance tuning
PDF
Building a High Performance WordPress Environment - WordCamp NYC 2010
PPTX
London Web Performance Meetup: Performance for mortal companies
PPTX
AngularJS Anatomy & Directives
PPT
Bootstrap with liferay
Developing JavaScript Widgets
Front End Performance
Instant Dynamic Forms with #states
Front End Performance
Stats stif-transports-idf-janvier-2016-2
Web performance tuning
Building a High Performance WordPress Environment - WordCamp NYC 2010
London Web Performance Meetup: Performance for mortal companies
AngularJS Anatomy & Directives
Bootstrap with liferay
Ad

Similar to Front End Performance (20)

PDF
What's New in Web Development
PDF
From One to a Cluster
PDF
WordCamp RVA
PDF
WordCamp RVA
PDF
WordCamp RVA 2011 - Performance & Tuning.pdf
PDF
WordCamp RVA 2011 - Performance & Tuning.pdf
PDF
Performance Improvements in Browsers
PDF
WordCamp RVA 2011 - Performance & Tuning
PDF
Capistrano
PDF
High performance website
PDF
#Webperf Choreography
PDF
Magee Dday2 Fixing App Performance Italiano
PDF
implement lighthouse-ci with your web development workflow
PDF
Web Performance Part 3 "Server-side tips"
PDF
Performance Improvements in Browsers
PDF
Performance Improvements In Browsers
PDF
Rails Conf Europe 2007 - Utilizing Amazon S3 and EC2 in Rails
PPT
re7jweiss
PDF
Server-Side JavaScript with jQuery and AOLserver
KEY
Web Optimization Level: Paranoid
What's New in Web Development
From One to a Cluster
WordCamp RVA
WordCamp RVA
WordCamp RVA 2011 - Performance & Tuning.pdf
WordCamp RVA 2011 - Performance & Tuning.pdf
Performance Improvements in Browsers
WordCamp RVA 2011 - Performance & Tuning
Capistrano
High performance website
#Webperf Choreography
Magee Dday2 Fixing App Performance Italiano
implement lighthouse-ci with your web development workflow
Web Performance Part 3 "Server-side tips"
Performance Improvements in Browsers
Performance Improvements In Browsers
Rails Conf Europe 2007 - Utilizing Amazon S3 and EC2 in Rails
re7jweiss
Server-Side JavaScript with jQuery and AOLserver
Web Optimization Level: Paranoid

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
cuic standard and advanced reporting.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
KodekX | Application Modernization Development
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Modernizing your data center with Dell and AMD
PDF
Empathic Computing: Creating Shared Understanding
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
Spectral efficient network and resource selection model in 5G networks
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Encapsulation_ Review paper, used for researhc scholars
cuic standard and advanced reporting.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KodekX | Application Modernization Development
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Approach and Philosophy of On baking technology
Review of recent advances in non-invasive hemoglobin estimation
20250228 LYD VKU AI Blended-Learning.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
NewMind AI Weekly Chronicles - August'25 Week I
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Modernizing your data center with Dell and AMD
Empathic Computing: Creating Shared Understanding
Per capita expenditure prediction using model stacking based on satellite ima...

Front End Performance

  • 1. Front End Performance Konstantin Käfer
  • 3. Render a usable version as early as possible. 3 Konstantin Käfer
  • 4. Firebug’s Net panel 4 Konstantin Käfer
  • 5. Waterfall graphs ‣ Visualizes load order ‣ Rules – descend as fast as possible – as shallow as possible – as narrow as possible 5 Konstantin Käfer
  • 6. YSlow ‣ Rates a webpage based on 13 criteria ‣ Determines overall load time ‣ Provides optimization suggestions ‣ Graphs, Numbers & Figures 6 Konstantin Käfer
  • 7. YSlow 7 Konstantin Käfer
  • 8. YSlow is not everything. 8 Konstantin Käfer
  • 9. Webpage Test ‣ Automated measurement using IE ‣ Shows when rendering starts ‣ Connection view: – http://webpagetest.org or local installation 9 Konstantin Käfer
  • 10. Other tools ‣ IBM Page Detailer http://www.alphaworks.ibm.com/tech/pagedetailer ‣ Pingdom http://tools.pingdom.com ‣ Episodes http://drupal.org/project/episodes ‣ Safari’s Web Inspector (Safari 4 and up) ‣ Web Debugging Proxies http://charlesproxy.com, http://fiddlertool.com 10 Konstantin Käfer
  • 11. Waterfall diagrams Start Connect First byte Last byte 11 Konstantin Käfer
  • 12. 1. Reduce requests ‣ Every file produces an HTTP request 60s 45s 30s Requests Size (KB) 15s 0s 0 10 20 30 ‣ Fewer requests is better than smaller size ‣ HTTP 1.1: 2 components per host in parallel 12 Konstantin Käfer
  • 13. 1. Reduce requests ‣ Sprites – Many images into one file – Shift into view with background-position ‣ Aggregate scripts and styles – Built into Drupal – Sophisticated: http://drupal.org/project/sf_cache ‣ No redirects 13 Konstantin Käfer
  • 14. 1. Reduce requests ‣ Caching (see 3.) ‣ Use CSS instead of images -moz-border-radius:4px; -webkit-border-radius: 4px; border-radius: 4px; ‣ data: URLs in style sheets – url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAGXRFWHRTb2Z 0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR9JREFUeNrEk02ORUAUhRVNJEgYsgdGbIHFsSGmhhjZAzFCR CLx906io3UROu8N+g7vPR9V95wi67oy79bXuTXP8zAMfdP48jzvCRJoihyHPcA4xRd1+V5HoZhmqZ1XWuaZ tu267qWZSmKQghhKGCrZVmqqgqCQNd16g/ooI8pNOuhfuC2bX3fFwTh8nroYwrNBTxNUxzHhmHcrAf/hwb KHWa3ATYURVFRFDdwWZbYBZR75xvGbpMkefQmyzIoaRiuNE3zCGP/UNIw/FRV9RGGBkoaRhLg5yPsOA6U tM/vbfuXz0jCjc+YXvu8JwxJOCcMJ9oShtgfYXJ8VedsY0O4p+d5pmnKssyy7PGj5Pwk//6qyCfvmWU+qP+DXw IMADReKA+zC0X8AAAAAElFTkSuQmCC); 14 Konstantin Käfer
  • 15. 1. Reduce requests ‣ Data URLs in Internet Explorer < 8: – MHTML: http://www.phpied.com/mhtml-when-you- need-data-uris-in-ie7-and-under/ – Include encoded images as Multipart HTML – url(mhtml:http://example.com/style.css!somestring); – Not a proven technology (fails on certain configs) 15 Konstantin Käfer
  • 16. 2. Use a CDN ‣ Content Delivery Network ‣ Place servers near users to reduce ping time ‣ More on that in a bit 16 Konstantin Käfer
  • 17. 3. Caching ? Disabled: Client Server Cache Full response ? Default: Client Server “Still fresh” Cache Partial response Aggressive: Client Server Cache 17 Konstantin Käfer
  • 18. 3. Caching ‣ Controlled by HTTP headers ‣ Browsers check whether content is fresh ‣ Set Expires header to a date in the far future – <Location /css> ExpiresActive On ExpiresDefault "access plus 1 year" </Location> ‣ Drupal default: 2 weeks ‣ Change filenames/URLs when updating 18 Konstantin Käfer
  • 19. 4. GZip ‣ Compress text content (don’t use for images!) – <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/css application/x-javascript </IfModule> ‣ Vastly reduces page size (often halfs) ‣ Compress scripts and styles as well 19 Konstantin Käfer
  • 20. 5. CSS to the top ‣ == in <head> ‣ Page renders when all header CSS is loaded ‣ Loading CSS later causes re-rendering and Flash of Unstyled Content ‣ Use <link> instead of @import http://www.stevesouders.com/blog/2009/04/09/dont-use-import/ 20 Konstantin Käfer
  • 21. 21 Konstantin Käfer ‣ == right before </body> ‣ Loading scripts blocks page rendering ‣ Scripts are loaded sequentially! (At least in most current browsers) ‣ Don’t use onfoo handlers in HTML code ‣ Graceful degradation 6. Scripts to the bottom
  • 22. 7. Minify CSS and JS ‣ Remove comments and whitespace ‣ Still savings, even with GZip ‣ Drupal’s aggregator or sf_cache.module 22 Konstantin Käfer
  • 23. 8. Parallelization ‣ “A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy.” (RFC 2616, 8.1.4) ‣ Use multiple host names ➔ higher parallelization (Don’t overdo it) ‣ Most current browsers use > 2 connections ‣ http://stevesouders.com/ua/ 23 Konstantin Käfer
  • 24. 8. Parallelization ‣ Ensure proper distribution ‣ Webpage Test graphs: 24 Konstantin Käfer
  • 25. 9. Reduce image weight ‣ OptiPNG, PNGCrush, ... – Removes invisible content by lossless recompression ‣ JPEGtran/ImageMagick: Lossless JPEG operations – Remove color profiles, meta data, … ‣ ImageOptim: Batch compression ‣ smushit.com – now integrated into YSlow ‣ punypng.com – supposedly more efficient 25 Konstantin Käfer
  • 26. 10. Lazy initialization ‣ JavaScript takes time to initialize – Libraries such as jQuery also count – Defer setup work ‣ Only load content above the fold – jQuery plugin: http://bit.ly/NpZPn – Useful on image-heavy sites ‣ Don’t load invisible content (tabs) on page load 26 Konstantin Käfer
  • 27. 11. Other optimizations ‣ “Premature optimization is the root of all evil” —Donald Knuth ‣ Only if you have optimized everything else ‣ Strategies – Move components to cookieless host – Remove ETags – Load order (see http://stevesouders.com/cuzillion/) 27 Konstantin Käfer
  • 28. Render a usable version as early as possible. Konstantin Käfer mail@kkaefer.com — @kkaefer 28 Konstantin Käfer
  • 29. Resources – High Performance Websites, Steve Souders, 2007. – http://stevesouders.com/examples/rules.php – http://developer.yahoo.com/performance/ – http://yuiblog.com/blog/category/performance – http://sites.google.com/site/io/even-faster-web-sites – http://slideshare.net/jeresig/performance-improvements- in-browsers – http://www.stevesouders.com/blog/2009/04/09/dont- use-import/ 29 Konstantin Käfer