3 tips for a better mobile user experience

73
3 Tips to Deliver Fast Performance Across Mobile Web Stefan Baumgartner @ddprrt Klaus Enzenhofer @kenzenhofer

Upload: klaus-enzenhofer

Post on 13-Apr-2017

115 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 3 Tips for a better mobile User Experience

3 Tips to Deliver Fast Performance Across Mobile WebStefan Baumgartner @ddprrtKlaus Enzenhofer @kenzenhofer

Page 2: 3 Tips for a better mobile User Experience

Who we are

Page 3: 3 Tips for a better mobile User Experience

4.5 sec 15 sec

Why?

Page 4: 3 Tips for a better mobile User Experience

NetworkSame Page

4.5 sec 15 secSanity Check

Browser CheckChrome 49 Chrome Mobile 33

Server SideLocal WLANLocal WLAN

Only difference is Browser & Device

Page 5: 3 Tips for a better mobile User Experience

Why did they look at the performance on the mobile device?

Page 6: 3 Tips for a better mobile User Experience

Google - Mobile Friendliness Campaign?!

Page 7: 3 Tips for a better mobile User Experience

Change in their compensations

plan!

Page 8: 3 Tips for a better mobile User Experience

Contract SLA: Average Response Time < 3

sec

User

on Desktop + Mobile

Page 9: 3 Tips for a better mobile User Experience

Good idea?!

Page 10: 3 Tips for a better mobile User Experience

Let’s talk about response time

Page 11: 3 Tips for a better mobile User Experience

NetworkSame Page

4.5 sec 15 secSanity Check

Browser CheckChrome 49 Chrome Mobile 33

Server SideLocal WLANLocal WLAN

Page 12: 3 Tips for a better mobile User Experience

4.5 sec 15 sec

UserDeveloper Operator

Page 13: 3 Tips for a better mobile User Experience
Page 14: 3 Tips for a better mobile User Experience

Let‘s take a look at the timings!Navigation Start: 0 ms

Domain Lookup End: 269 ms

Connect End: 330 ms

Response Start: 517 ms

Response End:518 ms

Dom Loading: 519 ms

Dom Interactive: 519 ms

DomContentLoaded Event End: 520 ms

Dom Complete: 520 ms

Load Event End:522 ms

Page 15: 3 Tips for a better mobile User Experience

0.5 sec 0.5 sec

Developer

Page 16: 3 Tips for a better mobile User Experience

User Operator

Page 17: 3 Tips for a better mobile User Experience

User

Page 18: 3 Tips for a better mobile User Experience
Page 19: 3 Tips for a better mobile User Experience

DNS Lookup

Initial connection

TTFB

(HTML)Download

Life of an URL request

Page 20: 3 Tips for a better mobile User Experience

Starting here, we are able to control …

Page 21: 3 Tips for a better mobile User Experience

<script src=“angular.js”> blocking!

Page 22: 3 Tips for a better mobile User Experience

<script src=“angular.js”> blocking!<script src=“main.js”> blocking!

Page 23: 3 Tips for a better mobile User Experience

<script src=“angular.js”> blocking!<script src=“main.js”> blocking!

start render

Page 24: 3 Tips for a better mobile User Experience

<script src=“angular.js”> blocking!<script src=“main.js”> blocking!

start renderresponse time

Page 25: 3 Tips for a better mobile User Experience

The impact of a JavaScript error

Page 26: 3 Tips for a better mobile User Experience

<script src=“angular.js”> blocking!<script src=“main.js”> blocking!

start render?

Page 27: 3 Tips for a better mobile User Experience

Important content first Everthing else is an

enhancement

Page 28: 3 Tips for a better mobile User Experience

Single page application frameworks are aware of this trend

- As long as you have valid routes (= URLs), you have the ability to render the state on the server

- The first two requests are the document and the styles of your application

- Then the JS framework kicks in

Page 29: 3 Tips for a better mobile User Experience

Server-side rendering for SPA

Page 30: 3 Tips for a better mobile User Experience

Brow

ser

App

Serv

ing

asse

tsAP

I Ser

ver

GET /app

JavaScript payload

GET /api/users

JSON payload

GET /api/posts

GET /api/pages

JSON payload

JSON payload

Send index.html

Request JS application

Page 31: 3 Tips for a better mobile User Experience

Brow

ser

App

Uni

vers

al re

nder

ing

API S

erve

r

GET /app

JavaScript payload

GET /api/users

JSON payload

GET /api/posts

GET /api/pages

JSON payload

JSON payload

Initial render HTML + CSS

Request JS application

Page 32: 3 Tips for a better mobile User Experience
Page 33: 3 Tips for a better mobile User Experience
Page 34: 3 Tips for a better mobile User Experience
Page 35: 3 Tips for a better mobile User Experience

4.5 sec 6 sec

UserDeveloper Operator

Page 36: 3 Tips for a better mobile User Experience

Operator

Page 37: 3 Tips for a better mobile User Experience

The CDN bill exploded!

Page 38: 3 Tips for a better mobile User Experience

285 Resources for an initial Page Load

151 CSS and 121 JavaScript files

Page 39: 3 Tips for a better mobile User Experience

~200 Resources had larger Header than Body

Page 40: 3 Tips for a better mobile User Experience

User

Page 41: 3 Tips for a better mobile User Experience

Mobile Data is expensive

Page 42: 3 Tips for a better mobile User Experience

https

://w

hatd

oesm

ysite

cost

.com

Page 43: 3 Tips for a better mobile User Experience
Page 44: 3 Tips for a better mobile User Experience

http://cdn.shopify.com/s/files/1/1462/9702/articles/26_cangoroo_1024x1024.jpg?v=1473016235

Page 45: 3 Tips for a better mobile User Experience

Back Home

Page 46: 3 Tips for a better mobile User Experience

Back Home

Page 47: 3 Tips for a better mobile User Experience

HTTP Archive – Transfer Size Trend

http://httparchive.org/trends.php

Average Size ~2 500 KB By 1.6 € per 100 KB

40 € to get started!!!!

Page 48: 3 Tips for a better mobile User Experience

2. Page weight

Page 49: 3 Tips for a better mobile User Experience

There’s lots of ways to reduce the payload

Page 50: 3 Tips for a better mobile User Experience

Responsive images

Page 51: 3 Tips for a better mobile User Experience
Page 52: 3 Tips for a better mobile User Experience

<img src=”screenshot-600.png” srcset="screenshot-200.png 200w, screenshot-400.png 400w, screenshot-600.png 600w, screenshot-800.png 800w, screenshot-1000.png 1000w, screenshot-1200.png 1200w, screenshot-1400.png 1400w, screenshot-1600.png 1600w” sizes="(min-width: 900px) 50vw, 100vw" alt=”Super screenshot of our product.">

Page 53: 3 Tips for a better mobile User Experience

<img src=”screenshot-600.png” srcset="screenshot-200.png 200w, screenshot-400.png 400w, screenshot-600.png 600w, screenshot-800.png 800w, screenshot-1000.png 1000w, screenshot-1200.png 1200w, screenshot-1400.png 1400w, screenshot-1600.png 1600w” sizes="(min-width: 900px) 50vw, 100vw" alt=”Super screenshot of our product.">

These sources are available. For each “width unit”there’s a reduced version of our original screenshot

The sizes define which source to choose from. Retina screensare also checked

A low-res fallback image for browsers that don’t know srcset

Page 54: 3 Tips for a better mobile User Experience

Reduce styles

Page 55: 3 Tips for a better mobile User Experience
Page 56: 3 Tips for a better mobile User Experience

Tree shaking

Page 57: 3 Tips for a better mobile User Experience
Page 58: 3 Tips for a better mobile User Experience
Page 59: 3 Tips for a better mobile User Experience
Page 60: 3 Tips for a better mobile User Experience

4.5 sec 6 sec

UserDeveloper Operator

Page 61: 3 Tips for a better mobile User Experience

3. Now for the returning visitor

Page 62: 3 Tips for a better mobile User Experience

Service worker

Page 63: 3 Tips for a better mobile User Experience
Page 64: 3 Tips for a better mobile User Experience
Page 65: 3 Tips for a better mobile User Experience
Page 66: 3 Tips for a better mobile User Experience

if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js') .then(function(registration) { // Registration was successful console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err) { // registration failed :( console.log('ServiceWorker registration failed: ', err); });}

Page 67: 3 Tips for a better mobile User Experience

self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request) .then(function(response) { // Cache hit - return response if (response) { return response; } return fetch(event.request); }) );});

var CACHE_NAME = 'my-site-cache-v1';var urlsToCache = [ '/', '/styles/main.css', '/script/main.js' ]; self.addEventListener('install', function(event) { // Perform install steps event.waitUntil( caches.open(CACHE_NAME) .then(function(cache) { console.log('Opened cache'); return cache.addAll(urlsToCache); }) );});

Page 68: 3 Tips for a better mobile User Experience
Page 69: 3 Tips for a better mobile User Experience

2 sec 2.5 sec

UserDeveloper Operator

Page 70: 3 Tips for a better mobile User Experience

4.5 sec 15 secUserDeveloper Operator

UserDeveloper Operator

How to?

2.5 sec2 sec

Page 71: 3 Tips for a better mobile User Experience

4.5 sec 15 secUserDeveloper Operator

UserDeveloper Operator

How to?

2.5 sec2 sec

Happy Developer != Happy User

Your user might travel and mobile data is expensive

The returning user will appriciate your caching strategy

Page 72: 3 Tips for a better mobile User Experience

You don‘t know how happy your users are?

https://www.dynatrace.com/trial/

Page 73: 3 Tips for a better mobile User Experience

Thank you!Stefan Baumgartner

@ddpprtKlaus Enzenhofer

@kenzenhofer