54
@AdityaPunjani Offline-First Progressive Web Apps

Offline-First Progressive Web Apps

Embed Size (px)

Citation preview

Page 1: Offline-First Progressive Web Apps

@AdityaPunjani

Offline-First Progressive Web Apps

Page 2: Offline-First Progressive Web Apps

Mobile is key focus area.

• No. of new internet users in India in the last year

alone was one third of United States population.

• 34.8% Internet Penetration.

• 81% of First Time Internet Users are only on

Mobile.

• India to become 2nd largest smart phone market

by 2017.

Source : Mary Meeker’s 2016 Internet Trends Report & Morgan Stanley Report

Page 3: Offline-First Progressive Web Apps
Page 4: Offline-First Progressive Web Apps

• Poor User Experience.

• Low Performance.

• Lack of Engagement tools.

Why we shut down our mobile website?

Page 5: Offline-First Progressive Web Apps

Mobile Web

No storage requirements

Instant Loading (No Install Friction) Always up-to-date

Page 6: Offline-First Progressive Web Apps

Challenges With Mobile

• Low-end Device Profiles

• Slow Internet Speeds

• Flaky Network connectivity

Page 7: Offline-First Progressive Web Apps

• Browser Navigation Failures

• Network Congestion

• Low Signal

• Battery Saver Mode

• Thermal CPU Throttling

• Limited Carrier Capacity

• Server Outage

• ISP failure

Unpredictable Conditions

Page 8: Offline-First Progressive Web Apps

Learnings from Native App.

Page 9: Offline-First Progressive Web Apps

Architecture Goals

• App Like Experience

• Build for Offline.

• Optimize for repeat visits

Page 10: Offline-First Progressive Web Apps

JavaScript (React.js) SPA+

App Shells

Page 11: Offline-First Progressive Web Apps

App Shells

Page 12: Offline-First Progressive Web Apps

Route Defined Route To Render Shell

/:slug/p/:itemid → /slug/p/itemId → Product

/(.*)/pr → /splat/pr → Browse

/search → /search → Search

/accounts/(.*) → /accounts/splat → Accounts

Routes → HTML App Shells

Page 13: Offline-First Progressive Web Apps

• Build Time heavy lifting.• Lightning fast Response

times.• Long-term cache.• Reused across URLs.• Perceived Performance.

• Fast and smooth

Navigations.• Rich Interactivity.• App Like polished

experience.

Single Page App App Shells

Page 14: Offline-First Progressive Web Apps

Service Worker• Highly Programmable Low level primitive.

• Progressive Network Proxy in browser.

• Sophisticated Caching policies.

• Lives beyond the Browser Scope.

Page 15: Offline-First Progressive Web Apps

App Shells - Fastest Strategy

Page 16: Offline-First Progressive Web Apps

Offline Mode Strategy

Page 17: Offline-First Progressive Web Apps

SW-Toolbox

Page 18: Offline-First Progressive Web Apps
Page 19: Offline-First Progressive Web Apps

Single Page App - Drawbacks

• JS bundle is huge.

• CSS bundle is huge.

• Bad first load Performance.  

Page 20: Offline-First Progressive Web Apps

Multiple SPAs Architecture

Page 21: Offline-First Progressive Web Apps

Each SPA : JS Bundle + CSS Bundle + HTML Shells

Page 22: Offline-First Progressive Web Apps

Benefits of Multiple SPAs• Smaller JS Bundles.• Smaller CSS Bundles.• Decoupled Deployments.• Navigations between SPAs allow SW

update, Cache clean up, Heap Memory

Clearing.

Page 23: Offline-First Progressive Web Apps
Page 24: Offline-First Progressive Web Apps
Page 25: Offline-First Progressive Web Apps

Home Screen users covert 70% more.

3x more Home Screen additions.

40% more repeat visits.

Page 26: Offline-First Progressive Web Apps

Biz Requirements• Cross browser support

• SEO 

Phase II

Page 27: Offline-First Progressive Web Apps

SEO with App Shells

• Build a cross browser app.

• Web Crawlers do execute JS.

• Keep JS size small.

• Embed SEO critical content in the

App Shells.

• Test using Webmaster tools.

Page 28: Offline-First Progressive Web Apps

Cross Browser• Build for the Lowest common Browser engine.• Optimize for Most common Browser. • Polyfill / Feature detect every API.• Tone down Interactions / Animations for older browsers.• SW as a Progressive Network Proxy. • PostCSS - Autoprefix and polyfills CSS.• Conditionally serve JS Polyfills.

Page 29: Offline-First Progressive Web Apps

PROGRESSIVE WEB APP

Page 30: Offline-First Progressive Web Apps

PerformancePhase III • JS Bundle Size growing with

new features.• Bounce Rate increasing.

Page 31: Offline-First Progressive Web Apps
Page 32: Offline-First Progressive Web Apps

Route Based Chunking (Code - Splitting)

Page 33: Offline-First Progressive Web Apps
Page 34: Offline-First Progressive Web Apps
Page 35: Offline-First Progressive Web Apps
Page 36: Offline-First Progressive Web Apps

Route Based Chunking

• Prioritized JS Downloads.

• Execute only critical JS.

• Cache-Invalidate only the changed JS bundle.

Page 37: Offline-First Progressive Web Apps

SPA

App Shells

Route Chunks

0s 2s 4s 6s 8s

First Content Paint First Meaningful Paint

Performance

Page 38: Offline-First Progressive Web Apps
Page 39: Offline-First Progressive Web Apps

Requirements

• Extreme Scalability

• Reduce # of network requests

• Fully fault tolerant Web App.

BBD

Page 40: Offline-First Progressive Web Apps

Offline - First

• Network Resilience: Offline is not an exception but the norm.

• Serving Strategy: Serve all requests from the cache (offline) before going to the network.

Page 41: Offline-First Progressive Web Apps

PRE-BBD Architecture

Page 42: Offline-First Progressive Web Apps

API Requests

Page 43: Offline-First Progressive Web Apps

Offline-FirstAPI Requests

Page 44: Offline-First Progressive Web Apps

Offline-First Architecture

Page 45: Offline-First Progressive Web Apps

Repeat Visit

Page 46: Offline-First Progressive Web Apps

SPA

App Shells

Route Chunks

Offline-First

0s 2s 4s 6s 8s

First Paint Meaningful Paint

Performance

Page 47: Offline-First Progressive Web Apps

“There are only two hard things in Computer Science: cache invalidation and naming things.” -- Phil Karlton.

Page 48: Offline-First Progressive Web Apps

Cache Invalidation

• MaxAgeSeconds based TTL.• Cache Versions• Kill Switch

Page 49: Offline-First Progressive Web Apps

Kill Switch

• Global Cache Version

• No-Cache, max-age=0 HTTP headers on SW.js

• SW self.skipWaiting()

• SW self.clients.claim()

Page 50: Offline-First Progressive Web Apps

Emergency - Refresh

Page 51: Offline-First Progressive Web Apps

Offline-First

Network Resilience Reliable Performance Robust Application

Page 52: Offline-First Progressive Web Apps

Reduced Bounce Rate.

2x BAU Conversion during BBD.

Zero User Perceived Downtime.

Page 53: Offline-First Progressive Web Apps
Page 54: Offline-First Progressive Web Apps

Thank You!

@AdityaPunjani