build better responsive websites. hrvoje jurišić

79
Build better responsive websites Hrvoje Jurišić, Inchoo

Upload: meetmagentony2014

Post on 24-Jun-2015

178 views

Category:

Technology


3 download

DESCRIPTION

Build Better Responsive websites. Hrvoje Jurišić

TRANSCRIPT

Page 1: Build Better Responsive websites. Hrvoje Jurišić

Build better responsive websitesHrvoje Jurišić, Inchoo

Page 2: Build Better Responsive websites. Hrvoje Jurišić
Page 3: Build Better Responsive websites. Hrvoje Jurišić

Nobody likes waiting

Page 7: Build Better Responsive websites. Hrvoje Jurišić

88% of customerswill never come back

Source: gomez.com

Page 9: Build Better Responsive websites. Hrvoje Jurišić

Amazon: 100 ms latency

1% less revenue

Source: highscalability.com

Page 10: Build Better Responsive websites. Hrvoje Jurišić

Bad performanceBad business

Page 11: Build Better Responsive websites. Hrvoje Jurišić

2013 load time: 7.2s

2014 load time: 10.7s

Source: http://www.radware.com/

Page 12: Build Better Responsive websites. Hrvoje Jurišić

2013: 1007 KB

2014: 1677 KB

Source: http://www.radware.com/

Page 14: Build Better Responsive websites. Hrvoje Jurišić
Page 15: Build Better Responsive websites. Hrvoje Jurišić

55% of eCommerce traffichappens on mobile device

Source: webperformancetoday.com

Page 16: Build Better Responsive websites. Hrvoje Jurišić

Mobile users expect sites to load

as fast or even faster than on their desktops

Source: strangeloopnetworks.com

Page 17: Build Better Responsive websites. Hrvoje Jurišić

@hrvojejurisicMeet Magento New York 2014

Page 18: Build Better Responsive websites. Hrvoje Jurišić

4G to the rescue??

Page 19: Build Better Responsive websites. Hrvoje Jurišić

not so fast...

Page 22: Build Better Responsive websites. Hrvoje Jurišić

Source: facebook

Page 23: Build Better Responsive websites. Hrvoje Jurišić
Page 24: Build Better Responsive websites. Hrvoje Jurišić

Source: guypo.com

Page SizeSmallest resolution vsBiggest resolution

Page 25: Build Better Responsive websites. Hrvoje Jurišić

Popular themeforest Magento Theme

Page 26: Build Better Responsive websites. Hrvoje Jurišić

RWD is bad for performance!

Page 27: Build Better Responsive websites. Hrvoje Jurišić

6% of RWD sitesdone right

Page 28: Build Better Responsive websites. Hrvoje Jurišić
Page 29: Build Better Responsive websites. Hrvoje Jurišić

RWD is bad for performance!

Page 30: Build Better Responsive websites. Hrvoje Jurišić

Blame the implementation,not the technique

RWD is bad for performance!

Page 31: Build Better Responsive websites. Hrvoje Jurišić
Page 32: Build Better Responsive websites. Hrvoje Jurišić

Speed is a featuretreat it as a part of UX design

Page 33: Build Better Responsive websites. Hrvoje Jurišić

Mobile first, content outworkflow

Source: http://www.lukew.com

Page 34: Build Better Responsive websites. Hrvoje Jurišić

Set a performance budget

Source: http://timkadlec.com

Page 35: Build Better Responsive websites. Hrvoje Jurišić
Page 36: Build Better Responsive websites. Hrvoje Jurišić

Optimization

Page 37: Build Better Responsive websites. Hrvoje Jurišić

Foundations:

Page 38: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

Foundations:

Page 39: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

● Use CSS sprites● Use icon fonts● Merge javascript● Merge CSS

Foundations:

Page 40: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

2. Gzip components

Foundations:

Page 41: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

2. Gzip components

3. Minify JS and CSS

Foundations:

Page 42: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

2. Gzip components

3. Minify JS and CSS

4. Optimize images

Foundations:

Page 43: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

2. Gzip components

3. Minify JS and CSS

4. Optimize images

5. CSS at the top

Foundations:

Page 44: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

2. Gzip components

3. Minify JS and CSS

4. Optimize images

5. CSS at the top

6. JS at the bottom or async

Foundations:

Page 45: Build Better Responsive websites. Hrvoje Jurišić

1. Reduce http requests

2. Gzip components

3. Minify JS and CSS

4. Optimize images

5. CSS at the top

6. JS at the bottom or async

7. Use CDN

Foundations:

Page 46: Build Better Responsive websites. Hrvoje Jurišić
Page 47: Build Better Responsive websites. Hrvoje Jurišić

Tools

1. Firebug/Web inspector2. webpagetest.org3. Google PageSpeed

Page 48: Build Better Responsive websites. Hrvoje Jurišić

Case study:

Load time: 2.85s Start render: 2.95s Visually Complete: 3.1s Speed index: 3060

Page 49: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery

● Merge JS files

● Don’t block rendering

Page 50: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

<default><reference name="head">

<action method="addJs"><script>prototype/prototype.js</script>

</action>. . .. . .. . .

<action method="addJs"><script>scriptaculous/builder.js</script>

</action></reference>

</default>

Page 51: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

Homepage JS

<script src="....ebbc8820d00736a6f2402ff7b21567b2.js"></script>

Page 52: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

<catalog_product_view><reference name="head">

<action method="addJs"><script>varien/product.js</script>

</action> <action method="addJs">

<script>varien/configurable.js</script></action>

</reference></catalog_product_view>

Page 53: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

Product page JS

<script src="....3c5329efd2e437592d48e1a3a4eac5b1.js"></script>

Page 54: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

Homepage JS

<script src="....ebbc8820d00736a6f2402ff7b21567b2.js"></script> 100KB

Product page JS

<script src="....3c5329efd2e437592d48e1a3a4eac5b1.js"></script> 120KB

Page 55: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

<default><reference name="head">

<action method="addJs"><script>prototype/prototype.js</script><params>data-group="main"</params>

</action>. . .. . .

<action method="addJs"><script>scriptaculous/builder.js</script><params>data-group="main"</params>

</action></reference>

</default>

Page 56: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - grouping js

Homepage JS

<script src="....ebbc8820d00736a6f2402ff7b21567b2.js" data-group="main"> - 100Kb

Product page JS

<script src="....ebbc8820d00736a6f2402ff7b21567b2.js" data-group="main"> - cached <script src="....3c5329efd2e437592d48e1a3a4eac5b1.js"> - 20Kb

Page 57: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - defer js

<action method="addJs"><script>prototype/prototype.js</script><params>data-group="main" defer</params>

</action>

Page 58: Build Better Responsive websites. Hrvoje Jurišić

Javascript delivery - defer js

<script type="text/javascript"> document.addEventListener( "DOMContentLoaded", function(){ Mage.Cookies.path = '<?php echo $this->getPath()?>'; Mage.Cookies.domain = '<?php echo $this->getDomain()?>'; }, false );</script>

Page 59: Build Better Responsive websites. Hrvoje Jurišić

Load time: 2.66s Start render: 1.3s Visually Complete: 2.8s Speed index: 2223

Page 60: Build Better Responsive websites. Hrvoje Jurišić

Font serving

● Choose fallback font wisely

● Prepare for failure - style fallback font

● Don’t block rendering

● Minimize FOUT

● Store Base64 encoded font in local storage

Page 61: Build Better Responsive websites. Hrvoje Jurišić

Font serving /** Pseudocode **/

if (fonts_in_localStorage) {

inject cached Font style sheet

} else {

// Don't block the loading of the page;

on(window, "load", function() {

load webfont.css

store fonts_in_localStorage

});

}

Script: https://gist.github.com/

Page 62: Build Better Responsive websites. Hrvoje Jurišić

Load time: 1.8s Start render: 1.29s Visually Complete: 2.3s Speed index: 1746

Page 63: Build Better Responsive websites. Hrvoje Jurišić

Images delivery

● Don’t waste user’s bandwidth

● Load image when needed: “Lazy loading”

● Load images based on screen size and pixel density:

“Responsive images”

Page 64: Build Better Responsive websites. Hrvoje Jurišić

Images delivery

<img class="lazy"src="default_image_url/loader"

data-small = "small_image_url" data-big = "big_image_url" alt="" />

Page 65: Build Better Responsive websites. Hrvoje Jurišić

Images delivery /** Pseudocode **/

if (image_is_on_screen) {

if (resolution < 500px) && (pixel_density < 2 ) {

show small image

} else {

show big image

}

}

Script: echo.js

Page 66: Build Better Responsive websites. Hrvoje Jurišić

Load time: 1.50s Start render: 1.29s Visually Complete: 2.2s Speed index: 1653

Page 67: Build Better Responsive websites. Hrvoje Jurišić

CSS delivery

● Start rendering early

● Inline Critical CSS

● Merge external CSS files

● Defer loading of non-critical CSS

Page 68: Build Better Responsive websites. Hrvoje Jurišić

CSS delivery - inline critical CSS

critical styles

non-critical styles

Page 69: Build Better Responsive websites. Hrvoje Jurišić

CSS delivery - inline critical CSS

/** Pseudocode **/

if (cssLoaded_cookie_exists) {Load CSS normally

} else {<style>

inject_critical_css</style>Load non-critical CSS asyncset cssLoaded cookie});

}

Script: loadCSS

Page 70: Build Better Responsive websites. Hrvoje Jurišić

CSS delivery - critical CSS

SCSS

_account.scss_breadcrumbs.scss_buttons.scss_cart.scss_checkout.scss_footer.scss_forms.scss_header.scss_global.scss_navigation.scss_search.scss. . . . . .

styles.scss styles.css

Page 71: Build Better Responsive websites. Hrvoje Jurišić

CSS delivery - critical CSS

SCSS

_account.scss_breadcrumbs.scss_buttons.scss_cart.scss_checkout.scss_footer.scss_forms.scss_header.scss_global.scss_navigation.scss_search.scss. . . . . .

critical.scss critical.css

Page 72: Build Better Responsive websites. Hrvoje Jurišić

Load time: 1.55s Start render: 0.7s Visually Complete: 2.1s Speed index: 1547

Page 73: Build Better Responsive websites. Hrvoje Jurišić

Load time: 1.55s Start render: 0.7s Visually Complete: 2.1sSpeed index: 1547

Load time: 2.85s Start render: 2.95s Visually Complete: 3.1sSpeed index: 3060

Page 74: Build Better Responsive websites. Hrvoje Jurišić

1. Performance matters

Takeaways:

Page 75: Build Better Responsive websites. Hrvoje Jurišić

1. Performance matters

2. Treat performance as a part of UX

Takeaways:

Page 76: Build Better Responsive websites. Hrvoje Jurišić

1. Performance matters

2. Treat performance as a part of UX

3. Set performance budget

Takeaways:

Page 77: Build Better Responsive websites. Hrvoje Jurišić

1. Performance matters

2. Treat performance as a part of UX

3. Set performance budget

4. Optimize

Takeaways:

Page 78: Build Better Responsive websites. Hrvoje Jurišić

1. Performance matters

2. Treat performance as a part of UX

3. Set performance budget

4. Optimize

5. RWD is NOT bad for performance!

Takeaways:

Page 79: Build Better Responsive websites. Hrvoje Jurišić

Thank you

Presentation: http://goo.gl/H0aNIc