50
Patrick Hüsler, huesler informatik Client Side Optimization Talked to several people, it is not entirely clear, what client side optimization actually ist Listened to a marketing talk, people use one term and mean something completely different

Client Side Optimization

Embed Size (px)

DESCRIPTION

Client Side Optimization can give websites a snappier interface and by reducing bandwidth save money. Presentation given at RailsWayCon 2010

Citation preview

Page 1: Client Side Optimization

Patrick Hüsler, huesler informatik

Client Side Optimization

Talked to several people, it is not entirely clear, what client side optimization actually istListened to a marketing talk, people use one term and mean something completely different

Page 2: Client Side Optimization

define “Client Side Optimization”

Page 3: Client Side Optimization

Not about improving your customer

Page 4: Client Side Optimization

train him to perform better

Page 5: Client Side Optimization

and maybe add some cardio funk

Page 6: Client Side Optimization

So that you can turn this fellow into

Page 7: Client Side Optimization

Into this.Although, if someone knows how to do this legally,I’d love to hear that

Page 8: Client Side Optimization

Client == Browser

Rails doesn’t scale

Page 9: Client Side Optimization

Performance==

Page

Page 10: Client Side Optimization

page_load.should be_fast

Page 11: Client Side Optimization

Measure and Analyze

Page 12: Client Side Optimization

Yahoo YSlow

Page 13: Client Side Optimization

Google Page

Speed

Page 14: Client Side Optimization

• Make fewer HTTP requests

• Use a Content Delivery Network

• Add Expires Headers

• Compress components with gzip

• Put CSS at top

• Put JavaScript at bottom

YSlow Criteria

Page 15: Client Side Optimization

• Avoid CSS expressions

• Make JavaScript and CSS external

• Reduce DNS lookups

• Minify JavaScript and CSS

• Avoid URL redirects

• Remove duplicate JavaScript and CSS

YSlow Criteria

Page 16: Client Side Optimization

• Configure entity tags (ETags)

• Make AJAX cacheable

• Use GET for AJAX requests

• Reduce the number of DOM elements

• Avoid HTTP 404 (Not found) error

• Reduce cookie size

YSlow Criteria

Page 17: Client Side Optimization

• Use cookie-free domains

• Avoid AlphaImageLoader filter

• Do not scale images in HTML

• Make favicon small and cacheable

YSlow Criteria

Page 18: Client Side Optimization

Google “YSlow Rails”CopyPaste

=>Done!!!

Page 19: Client Side Optimization

Google Driven Development

Page 20: Client Side Optimization
Page 21: Client Side Optimization

Increased User Experience

>

Page 22: Client Side Optimization

Less data to

<

Page 23: Client Side Optimization

Less connections to open

<

Page 24: Client Side Optimization

Faster page load

Page 25: Client Side Optimization

Snappier UI

Page 26: Client Side Optimization

~=Better user experience

Page 27: Client Side Optimization

$$$

Page 28: Client Side Optimization

Less Bandwidth

<

Page 29: Client Side Optimization

Less Connections

<

Page 30: Client Side Optimization

Less Server load

~<

Page 31: Client Side Optimization

~=

Save money

Page 32: Client Side Optimization

Focus

Page 33: Client Side Optimization

80/20

Page 34: Client Side Optimization

• Make fewer HTTP requests

• Parallel connections

• Add Expires Headers

• Compress components with gzip

• Minify assets

Focus

Page 35: Client Side Optimization

All with a little help from Rails

Page 36: Client Side Optimization

AssetTagHelper

Page 37: Client Side Optimization

Combine

javascript_include_tag :all, :cache => truestylesheet_link_tag :all, :cache => true

Page 38: Client Side Optimization

Parallelize ActionController::Base.asset_host = Proc.new { |source| "http://assets#{rand(2) + 1}.example.com" }

Page 39: Client Side Optimization

Add expires headers

Page 40: Client Side Optimization

Apache <FilesMatch "\.(ico|gif|jpe?g|png|js|css)$"> ExpiresDefault "access plus 1 year" </FilesMatch>

Page 41: Client Side Optimization

NGINXserver {  location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {    expires max;    break;  }}

Page 42: Client Side Optimization

Compress contents

Page 43: Client Side Optimization

Apache<directory "/Users/joe/work/cootweet/public">Options -Indexes        AddOutputFilterbyType DEFLATE text/plain text/html text/css application/javascript text/xml application/xml application/xml+rss text/javascript</directory>

Page 44: Client Side Optimization

NGINXgzip on;gzip_http_version 1.0;gzip_comp_level 2;gzip_proxied any;gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript

Page 45: Client Side Optimization

CSS Sprites #panel1b a:hover { background: transparent url(test-3.jpg) 0 -200px no-repeat;} #panel2b a:hover { background: transparent url(test-3.jpg) -96px -200px no-repeat;} #panel3b a:hover { background: transparent url(test-3.jpg) -172px -200px no-repeat;} #panel4b a:hover { background: transparent url(test-3.jpg) -283px -200px no-repeat;}

Page 49: Client Side Optimization

??? ??

Questions?

? ??