PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis...

57
Aurelijus Banelis PWA with Symfony 4 VilniusPHP 0x43 2018-06-07

Transcript of PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis...

Page 1: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Aurelijus Banelis

PWA withSymfony 4

VilniusPHP 0x432018-06-07

Page 3: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Progressive Web Apps from

Symfony 4developer perspective

Page 4: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 5: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 7: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 8: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 10: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 11: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 12: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 13: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 15: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 16: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 17: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 18: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 22: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

.addPlugin(new ServiceWorkerPlugin({ staticFiles: { './assets/workers/manifest.json': '../manifest.json', './assets/workers/service-worker.js': '../service-worker.js', './assets/workers/version.json': 'version.json', './assets/js/main.js': 'js/main.js' }, dynamicFiles: [ 'js/app.js' ], replace: { "@NOTICE@": () => "This file is AUTO GENERATED!", "@VERSION@": () => "v0.0.5-" + (new Date()).toISOString(), }}))

Page 23: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 25: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 26: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

https://gist.github.com/aurelijusb/2d7ce6e7ed8634c49a2d0645943c9744

Page 27: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 28: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 29: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 30: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 31: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 35: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 36: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 38: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 39: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 40: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 41: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

{% if disablePwa == 'true' and app.environment == 'dev' %} <script type="text/javascript"> var disablePwa = true; </script>{% endif %}if ( ('serviceWorker' in navigator) && (typeof disablePwa === "undefined")) {

parameters: env(DISABLE_PWA): falsetwig: globals: disablePwa: '%env(DISABLE_PWA)%'

DISABLE_PWA=true

Page 42: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 43: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 44: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software
Page 45: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

update() { if ('serviceWorker' in navigator && navigator.serviceWorker.controller && serviceWorker) { serviceWorker.unregister() .then(clearCache) .then(() => { console.log('[ServiceWorker] Unregistered'); location.reload(); }).catch((e) => { console.error( '[ServiceWorker] Failed to unregister', e ); }); }}

Page 46: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

https://gist.github.com/aurelijusb/2d7ce6e7ed8634c49a2d0645943c9744

Page 47: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

const clearCache = () => { return caches.keys().then((keyList) => { return Promise.all(keyList.map((key) => { console.log( '[ServiceWorker] Removing old cache', key ); return caches.delete(key); })); })};

Page 48: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

https://gist.github.com/aurelijusb/2d7ce6e7ed8634c49a2d0645943c9744

Page 49: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 50: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

What we want?

Validate cache

Backend

Frontend

Clear cache

Page 51: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 52: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 54: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Web App Manifest

Push notifications

Browser storage

Seamless A/B testing GDPR: delayed

personal data on device

Mobile-like, butno wait for update

Page 55: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

Intro into PWA

Development environment

Final thoughts

Page 56: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

PWA withSymfony 4

Page 57: PWA with Symfony 4 - Aurelijus Banelis · Symfony 4 VilniusPHP 0x43 2018-06-07. Aurelijus Banelis PGP 0x320205E7539B6203 130D C446 1F1A 2E50 D6E3 3DA8 3202 05E7 539B 6203 Software

PWA withSymfony 4

Aurelijus BanelisVilniusPHP 0x43

2018-06-07

Questions?