SlideShare ist ein Scribd-Unternehmen logo
Vom Frontendmonolith zu
Microfrontends
Emanuel Indermühle
18.03.2019 2
Emanuel Indermühle
PhD in Computer Science, Uni Bern
Technologie Architekt, die Mobiliar
Scrum-Rolle Product Owner der
Joint Application Platform, die Mobiliar
Auf unserem Weg vom Frontendmonolith zu Microfrontends
Ausgangs-
lage
Ziele Optionen Hürden Vision
Nächste
Schritte
Ausgangslage
Wie alles begann
18.03.2019 4
Ausgangslage – B2E Portal
• B2E Portal
• Schadensplattform
• Angular JS
• Erfolgreiche Einführung Q1 2015
Projekt
• Ein Frontend Team
• Ein Architekt.Organisation
• 2-Way Data Binding
• Monolith im Backend
• Release 2x jährlich
• Offline Anforderung
Architektur
18.03.2019 5
Ausgangslage – B2E Portal – Die Vertriebsplattform
• Gleiche Code-Base
• Viel Code-SharingProjekt
• 3 neue Teams (5-7 insgesamt)
• 2 neue ArchitektenOrganisation
• State Management an «Flux» angelehnt
• Microservices im Backend
• Agiles Releasing
• Offline-Anforderung
Architektur
18.03.2019 6
Ausgangslage - Probleme
• Unterschiedliche Architekturen
• Komplexität des Builds
• Lokale Änderungen -> Globale Auswirkungen
• Fast 25 Mitarbeiter pushen Commits
1 Code-
Base
• Viel Koordination für Releasing und Testing
• Performance Probleme (im IE)1 SPA
• Kostet viel
• Keine VerifikationOffline
• Schwierig
• Bower zu NPM
• JavaScript zu Typescript
LifeCycle
18.03.2019 7
Ziele der Modularisierung
18.03.2019 8
• Keine Abstimmungsmeetings
• Keine Feuerwehrübungen
Weniger
Koordination
• Entwickler gewinnen die Übersicht
Weniger
Komplexität
• Changes in Vertriebsportal verursachen keinen
Bugs im Schadenportal
Lokale
Auswirkungen
• Bugfix Releases muss nicht mit 25 Entwickler
abgesprochen werden.Getrennte Releases
• Teams können LifeCycle unabhängig angehenLifecycle
• Teams können App-Architektur selber wählenArchitektur
Optionen
18.03.2019 9
Optionen – «Code Base»
• Einfacheres Code Sharing
• Weniger Libs
• Einfacheres Testing
• Weniger Aufwand
Monorepo
• Weniger Code Sharing
• Kleinere SPAs einfacher Build
• Lokaler Change -> lokale
Auswirkung
Multirepo
18.03.2019 10
Optionen – «Navigation»
• z.B. «Single SPA»
• Performance Navigation
• z.B. «Scion Workbench»?
Monopage
• Mehrere SPAs
• Technisch einfacher
• Legacy-freundlich
• Weniger Abhängigkeit
• Ressourcen schonender
Multipage
18.03.2019 11
Optionen – «Code Sharing»
• Technisch einfachLibs
• Unabhängiges Deployment
• Technisch einfach
• Eingeschränktes UX
iframe
• Unabhängiges Deployment
• Experimentell
• Schlechte Entwickler Ergonomie
Web
Components
18.03.2019 12
Vision aus der Sicht «Feature Team»
18.03.2019 13
Service
Frontend
Service
Service
Frontend
Service
Service
Frontend
Frontend
• unabhängig Deployen
• unabhängig Lifecycle machen
• unabhängig das Framework wählen
Ein Feature Team kann…
Navigation
Let’s Go
18.03.2019 14
Multirepo Multipage Libs iframe
Neue SPA
Modularisierung in Action
18.03.2019 15
Frontendmonolith
Funktionales Module
Common Utilities
Navigation
Toggle
Hürde «Dependency-Hell»
18.03.2019 16
Hürde «Dependency-Hell»
• Welche Versionen sind
miteinander kompatibel?
18.03.2019 17
SPA
B C
D
V1.1
D
V1.4
Hürde «Dependency-Hell» - Dependency Propagator
18.03.2019 18
SPA
B
(Latest Version)
C
(Latest Version)
D
(Latest Version)
Build lib
Publish lib
Buildjob of lib
Write lib’s
new Version
to consumers
master
branch
Hürde «Breaking Changes»
18.03.2019 19
Hürde «Breaking Changes»
18.03.2019 20
Build lib
Publish lib
Buildjob of lib
Write lib’s
new Version
to consumers
master
branch
Buildjob of consumer
Build breaks
Hürde «Breaking Changes» – CDC Testing
18.03.2019 21
Build lib
Publish
Snapshot
Buildjob of lib
Build every
consumer with
new Snapshot
Write Lib’s new
Version to
consumers
master branch
Publish lib
Hürde «Angular Migration»
18.03.2019 22
Hürde «Angular Migration»
Angular JS Angular
Version: 1.5, 1.6, 1.7 Version: 2, 4, 5, 6, 7 (Semver)
Hürde «Angular Migration» - Eine neue Programmiersprache?
angular
.module('b2e.ui.utils.disabled.directives', [])
.directive('b2eDisabled', function b2eDisabledDirective() {
return {
restrict: 'EA',
require: ['b2eDisabled', '?^^b2eDisabled'],
controllerAs: 'b2eDisabledCtrl',
controller: function B2eDisabledCtrl($scope, $element, $attrs) {
var ctrl = this;
var unregisterExpression;
ctrl.$onInit = function() {
if (!ctrl.parentCtrl) {
ctrl.parentCtrl = parentDummyCtrl;
}
$scope.$on('$destroy',
ctrl.parentCtrl.registerChild(ctrl));
var expression = $attrs.b2eDisabled || $attrs.when;
};
}};
});
import {Component, Inject, Input} from '@angular/core';
import {PORTAL_NAV_SERVICE} from '@mobi/b2e-utils-ng-jslib';
@Component({
selector: 'vvn-vertrag-angebot-liste',
templateUrl: './angebotsliste.component.html',
})
export class AngebotslisteComponent {
@Input() geschaeftsnummer: string;
@Input() partnerFachnummer: string;
@Input() isLoading: boolean;
constructor(@Inject(PORTAL_NAV_SERVICE) private pn: PortalNavigator) {
}
public neuesAngebotErstellen = (): void => {
const baseUrl = '/vvn-vertrieb-b2e/vvn/produktauswahl/';
return this.pn.navigateTo(baseUrl);
}
}
Hürde «Angular Migration» - ngUpgrade
AngularJS DI context Angular DI context
NgUpgrade
DI
- MyComp
- MyService
DI
- HisComp
- HisService
Upgrades
Downgrades
Hürde «Angular Migration» - unterschiedlichen Upgrade Stufen
18.03.2019 26
Angular SPAngUpgrade SPA
App - Code
AngularJS SPA
Angular JsLibngUpgrade JsLibAngularJS JsLib
upgrades
SPAsJSlibs
Hürde «Performance»
18.03.2019 27
Hürde «Performance» - Loading
• Initiale Ladezeit der SPAs
• Navigation zwischen SPAs ist zu langsam
18.03.2019 28
Hürde «Performance» - Loading
• Angular + Angularjs + ngUpgrade + Viel Code
• Modularisierung
• Angular Migration
• AnuglarJs und ngUpgrade fallen weg, dafür haben wir Treeshaking
Laden
• Anuglar + AngularJS
• Angular MigrationInitialisierung
• Offline Anforderung
• Lazy loading
• Sync zu Async Rewrite (Aufwand Gross)
Bereitstellung
Stammdaten
• AngularJS
• Angular MigrationRendering
18.03.2019 29
Hürde «Performance» - Dilemma
• Angular Migration nötig
• Wegen Performance
Modularisierung
• Modularisierung nötig
• Wegen Individuellem LifeCycle
Angular
Migration
18.03.2019 30
Hürde «Performance» - Tablösung
• Chrome Extension
• Navigation wird abgefangen
• Zuordnung von Root-Context zu Bowser-Tab
Wie?
• SPAs bleiben geladen,
• mehrfache Initialisierung entfällt.Hilfts?
• Bis die SPAs schnell laden
• Migration und Modularisierung entsprechend
fortgeschritten sind.
Wie lange?
18.03.2019 31
Rückblick - Ausblick
18.03.2019 32
Rückblick – Ziel erreicht?
Koordination / Komplexität
Lokale Änderung -> Lokale Auswirkungen
Unabhängiges Releasing
•Libs verhindern wirklich unabhängiges Releasing
LifeCycle
•Libs erzwingen orchestrierten LifeCycle
Freiheit in der App Architektur
•Angular ist gesetzt
Schneidung
•SPAs sind keine Micro Frontends
18.03.2019 33
Ausblick – Web Components
Mit Angular Elements
Standardisierter Build-Prozess
Unabhängiges Releasing
Unabhängiger LifeCycle
Die Micro Frontends
18.03.2019 34
Nächste Schritte
18.03.2019 35
• Erlaubt Angular-Only
SPAs
Angular Migration
zentraler Libs
• Wir bleiben dran
Update Angular 7 auf
Angular 8
• Siehe Vision
Experimente mit
Angular Elements
• Wie gesund sind unsere
Frontends
Observability im
Frontend
Das Team
18.03.2019 36
Martin
Fischer
Tomas
Trajan
Matthias
Junker
Christian
Kohler
Kevin
Kreuzer
Christof
Leuenberger
Roland
Wyss
Haben wir Zeit für Fragen
18.03.2019 37

Weitere ähnliche Inhalte

PDF
BATbern42 End-to-End Verantwortlichkeit in der Praxis: Scion Workbench
PDF
BATbern41 Die Evolution zu Microservices
PDF
Automatisierungsmöglichkeiten beim Legacy-Reengineering - Andres Koch, Object...
PDF
Eclipse RapidClipse - Status Quo
PDF
Process Automation Forum Munich, Swiss Life
PPTX
MT AG Data Vault Generator
PDF
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
PDF
Webcast Azure Integration Migration - Von BizTalk in die Cloud
BATbern42 End-to-End Verantwortlichkeit in der Praxis: Scion Workbench
BATbern41 Die Evolution zu Microservices
Automatisierungsmöglichkeiten beim Legacy-Reengineering - Andres Koch, Object...
Eclipse RapidClipse - Status Quo
Process Automation Forum Munich, Swiss Life
MT AG Data Vault Generator
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
Webcast Azure Integration Migration - Von BizTalk in die Cloud

Was ist angesagt? (16)

PDF
Public Cloud Erfahrungsbericht SBB
PDF
Evaluierung einer Hybris-Anbindung an Sitecore mittels Commerce Connect
PDF
With Kafka on the way to production/Kafka in produktion_ausblick
PDF
BAT40 Mobiliar Koller Mösching AI@Mobiliar Wie AI-Services in der Mobiliar ge...
PDF
Hybris und Sitecore - Der Commerce Connect im Einsatz
PDF
Continuous deployment in LeanIX @ Bonn Agile
PDF
20150611 track4 2_ae21_salesforce and ibm software
PPTX
Nintex Forms als Ersatz für InfoPath?
PDF
Microsoft Azure Cloud mit der Sitecore Experience Platform
PDF
20150611 track3 2_bp22_ibm_connections_ist_keine_insel
PDF
MT AG Präsentation Rapid Application Development mit APEX 5
PPT
Rapid Application Development mit Openobject
PDF
B1 Acocon Lotus Day 08.09.2009
PPTX
Optimierung des europäischen Einzelwagenverkehrs im Kontext der digitalen Tra...
PDF
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
PDF
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
Public Cloud Erfahrungsbericht SBB
Evaluierung einer Hybris-Anbindung an Sitecore mittels Commerce Connect
With Kafka on the way to production/Kafka in produktion_ausblick
BAT40 Mobiliar Koller Mösching AI@Mobiliar Wie AI-Services in der Mobiliar ge...
Hybris und Sitecore - Der Commerce Connect im Einsatz
Continuous deployment in LeanIX @ Bonn Agile
20150611 track4 2_ae21_salesforce and ibm software
Nintex Forms als Ersatz für InfoPath?
Microsoft Azure Cloud mit der Sitecore Experience Platform
20150611 track3 2_bp22_ibm_connections_ist_keine_insel
MT AG Präsentation Rapid Application Development mit APEX 5
Rapid Application Development mit Openobject
B1 Acocon Lotus Day 08.09.2009
Optimierung des europäischen Einzelwagenverkehrs im Kontext der digitalen Tra...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
Anzeige

Ähnlich wie BATbern42 Vom Frontend Monolithen zu Micro-Frontends (20)

PDF
Creasoft-Akademie - Mobile Multiplattform Apps
PDF
Progressive Web Apps mit Angular
PDF
JavaMagazin - AngularJS
PDF
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
PDF
Back to the Frontend – aber nun mit Microservices
PPTX
Mobile Anwendungen mit Apache Cordova
PDF
Legacy WebApps mit AngularJS pimpen
PPTX
Frontend Development für Backend Developer
PDF
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
PDF
Lean Startup mit JavaScript
PPTX
Rapid Application Development mit Grails und AngularJS
PDF
Angular 2: Neuerungen und Migration
PDF
AngularJS für .NET-Entwickler
PDF
Hybride Entwicklung mit Ionic
PPTX
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
PDF
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
PDF
User Interface Trends für Geschäftsanwendungen
PDF
AngularJS
PDF
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
PDF
Schichtenarchitektur in Symfony Projekten
Creasoft-Akademie - Mobile Multiplattform Apps
Progressive Web Apps mit Angular
JavaMagazin - AngularJS
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Back to the Frontend – aber nun mit Microservices
Mobile Anwendungen mit Apache Cordova
Legacy WebApps mit AngularJS pimpen
Frontend Development für Backend Developer
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Lean Startup mit JavaScript
Rapid Application Development mit Grails und AngularJS
Angular 2: Neuerungen und Migration
AngularJS für .NET-Entwickler
Hybride Entwicklung mit Ionic
Beschleunigen Sie Ihre Web-Entwicklung mit AngularJS Framework
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
User Interface Trends für Geschäftsanwendungen
AngularJS
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
Schichtenarchitektur in Symfony Projekten
Anzeige

Mehr von BATbern (20)

PDF
BATbern56 TrainVision – ein ehrlicher Erfahrungsbericht vom Prototyp bis zur ...
PDF
BATbern56 RAG in Produktion bei der Mobiliar
PDF
BATbern56 Vom Experiment zur Wirkung – Die KI-Initiative im ISC-EJPD
PDF
BATbern56 Die Architektur der intelligenten Zukunft: Vom Code zum kooperative...
PDF
BATbern56 GenAI beim Bund: Wie das BAFU komplexe Anfragen meistert!
PDF
BATbern56 ariolilaw Rechtskonformer Einsatz von GenAI
PPTX
BATbern55 Bridging the Gap from Telco to Techco with Agile Architecture
PPTX
BATbern55 How can TWINT be agile in an inert ecosystem?
PPTX
BATbern55 Agile Architektur und Transformation @Postfinance
PDF
BATbern54 Build & Run on the same platform, embracing Platform Engineering & ...
PDF
BATbern54 Plattform-Engineering für digitale Versicherungsprodukte: «Joint Ap...
PDF
BATbern54 Plattform-Engineering für digitale Versicherungsprodukte: Erfahrung...
PDF
BATbern53 Post Data persistence in the business-critical and event driven env...
PPTX
BATbern53 BKW Easy Migration through Clean Architecture
PDF
BATbern53 ETHZ Rethinking Cluster State Management for Lightweight Function a...
PDF
BATbern53 SBB Wieso in jeder Zugfahrt der SBB ein Stück MongoDB drinsteckt
PDF
BATBern53 - EPFL - Blue Brain and related technical challenges
PDF
BATbern53 Die Mobiliar Bring die Algorithmen zu den Daten – nicht umgekehrt
PDF
BATbern53 ELCA Analyticsdatenhaltung in der Cloud
PDF
BATber53 AWS Modernize your applications with purpose-built AWS databases
BATbern56 TrainVision – ein ehrlicher Erfahrungsbericht vom Prototyp bis zur ...
BATbern56 RAG in Produktion bei der Mobiliar
BATbern56 Vom Experiment zur Wirkung – Die KI-Initiative im ISC-EJPD
BATbern56 Die Architektur der intelligenten Zukunft: Vom Code zum kooperative...
BATbern56 GenAI beim Bund: Wie das BAFU komplexe Anfragen meistert!
BATbern56 ariolilaw Rechtskonformer Einsatz von GenAI
BATbern55 Bridging the Gap from Telco to Techco with Agile Architecture
BATbern55 How can TWINT be agile in an inert ecosystem?
BATbern55 Agile Architektur und Transformation @Postfinance
BATbern54 Build & Run on the same platform, embracing Platform Engineering & ...
BATbern54 Plattform-Engineering für digitale Versicherungsprodukte: «Joint Ap...
BATbern54 Plattform-Engineering für digitale Versicherungsprodukte: Erfahrung...
BATbern53 Post Data persistence in the business-critical and event driven env...
BATbern53 BKW Easy Migration through Clean Architecture
BATbern53 ETHZ Rethinking Cluster State Management for Lightweight Function a...
BATbern53 SBB Wieso in jeder Zugfahrt der SBB ein Stück MongoDB drinsteckt
BATBern53 - EPFL - Blue Brain and related technical challenges
BATbern53 Die Mobiliar Bring die Algorithmen zu den Daten – nicht umgekehrt
BATbern53 ELCA Analyticsdatenhaltung in der Cloud
BATber53 AWS Modernize your applications with purpose-built AWS databases

BATbern42 Vom Frontend Monolithen zu Micro-Frontends

  • 2. 18.03.2019 2 Emanuel Indermühle PhD in Computer Science, Uni Bern Technologie Architekt, die Mobiliar Scrum-Rolle Product Owner der Joint Application Platform, die Mobiliar
  • 3. Auf unserem Weg vom Frontendmonolith zu Microfrontends Ausgangs- lage Ziele Optionen Hürden Vision Nächste Schritte
  • 5. Ausgangslage – B2E Portal • B2E Portal • Schadensplattform • Angular JS • Erfolgreiche Einführung Q1 2015 Projekt • Ein Frontend Team • Ein Architekt.Organisation • 2-Way Data Binding • Monolith im Backend • Release 2x jährlich • Offline Anforderung Architektur 18.03.2019 5
  • 6. Ausgangslage – B2E Portal – Die Vertriebsplattform • Gleiche Code-Base • Viel Code-SharingProjekt • 3 neue Teams (5-7 insgesamt) • 2 neue ArchitektenOrganisation • State Management an «Flux» angelehnt • Microservices im Backend • Agiles Releasing • Offline-Anforderung Architektur 18.03.2019 6
  • 7. Ausgangslage - Probleme • Unterschiedliche Architekturen • Komplexität des Builds • Lokale Änderungen -> Globale Auswirkungen • Fast 25 Mitarbeiter pushen Commits 1 Code- Base • Viel Koordination für Releasing und Testing • Performance Probleme (im IE)1 SPA • Kostet viel • Keine VerifikationOffline • Schwierig • Bower zu NPM • JavaScript zu Typescript LifeCycle 18.03.2019 7
  • 8. Ziele der Modularisierung 18.03.2019 8 • Keine Abstimmungsmeetings • Keine Feuerwehrübungen Weniger Koordination • Entwickler gewinnen die Übersicht Weniger Komplexität • Changes in Vertriebsportal verursachen keinen Bugs im Schadenportal Lokale Auswirkungen • Bugfix Releases muss nicht mit 25 Entwickler abgesprochen werden.Getrennte Releases • Teams können LifeCycle unabhängig angehenLifecycle • Teams können App-Architektur selber wählenArchitektur
  • 10. Optionen – «Code Base» • Einfacheres Code Sharing • Weniger Libs • Einfacheres Testing • Weniger Aufwand Monorepo • Weniger Code Sharing • Kleinere SPAs einfacher Build • Lokaler Change -> lokale Auswirkung Multirepo 18.03.2019 10
  • 11. Optionen – «Navigation» • z.B. «Single SPA» • Performance Navigation • z.B. «Scion Workbench»? Monopage • Mehrere SPAs • Technisch einfacher • Legacy-freundlich • Weniger Abhängigkeit • Ressourcen schonender Multipage 18.03.2019 11
  • 12. Optionen – «Code Sharing» • Technisch einfachLibs • Unabhängiges Deployment • Technisch einfach • Eingeschränktes UX iframe • Unabhängiges Deployment • Experimentell • Schlechte Entwickler Ergonomie Web Components 18.03.2019 12
  • 13. Vision aus der Sicht «Feature Team» 18.03.2019 13 Service Frontend Service Service Frontend Service Service Frontend Frontend • unabhängig Deployen • unabhängig Lifecycle machen • unabhängig das Framework wählen Ein Feature Team kann… Navigation
  • 14. Let’s Go 18.03.2019 14 Multirepo Multipage Libs iframe
  • 15. Neue SPA Modularisierung in Action 18.03.2019 15 Frontendmonolith Funktionales Module Common Utilities Navigation Toggle
  • 17. Hürde «Dependency-Hell» • Welche Versionen sind miteinander kompatibel? 18.03.2019 17 SPA B C D V1.1 D V1.4
  • 18. Hürde «Dependency-Hell» - Dependency Propagator 18.03.2019 18 SPA B (Latest Version) C (Latest Version) D (Latest Version) Build lib Publish lib Buildjob of lib Write lib’s new Version to consumers master branch
  • 20. Hürde «Breaking Changes» 18.03.2019 20 Build lib Publish lib Buildjob of lib Write lib’s new Version to consumers master branch Buildjob of consumer Build breaks
  • 21. Hürde «Breaking Changes» – CDC Testing 18.03.2019 21 Build lib Publish Snapshot Buildjob of lib Build every consumer with new Snapshot Write Lib’s new Version to consumers master branch Publish lib
  • 23. Hürde «Angular Migration» Angular JS Angular Version: 1.5, 1.6, 1.7 Version: 2, 4, 5, 6, 7 (Semver)
  • 24. Hürde «Angular Migration» - Eine neue Programmiersprache? angular .module('b2e.ui.utils.disabled.directives', []) .directive('b2eDisabled', function b2eDisabledDirective() { return { restrict: 'EA', require: ['b2eDisabled', '?^^b2eDisabled'], controllerAs: 'b2eDisabledCtrl', controller: function B2eDisabledCtrl($scope, $element, $attrs) { var ctrl = this; var unregisterExpression; ctrl.$onInit = function() { if (!ctrl.parentCtrl) { ctrl.parentCtrl = parentDummyCtrl; } $scope.$on('$destroy', ctrl.parentCtrl.registerChild(ctrl)); var expression = $attrs.b2eDisabled || $attrs.when; }; }}; }); import {Component, Inject, Input} from '@angular/core'; import {PORTAL_NAV_SERVICE} from '@mobi/b2e-utils-ng-jslib'; @Component({ selector: 'vvn-vertrag-angebot-liste', templateUrl: './angebotsliste.component.html', }) export class AngebotslisteComponent { @Input() geschaeftsnummer: string; @Input() partnerFachnummer: string; @Input() isLoading: boolean; constructor(@Inject(PORTAL_NAV_SERVICE) private pn: PortalNavigator) { } public neuesAngebotErstellen = (): void => { const baseUrl = '/vvn-vertrieb-b2e/vvn/produktauswahl/'; return this.pn.navigateTo(baseUrl); } }
  • 25. Hürde «Angular Migration» - ngUpgrade AngularJS DI context Angular DI context NgUpgrade DI - MyComp - MyService DI - HisComp - HisService Upgrades Downgrades
  • 26. Hürde «Angular Migration» - unterschiedlichen Upgrade Stufen 18.03.2019 26 Angular SPAngUpgrade SPA App - Code AngularJS SPA Angular JsLibngUpgrade JsLibAngularJS JsLib upgrades SPAsJSlibs
  • 28. Hürde «Performance» - Loading • Initiale Ladezeit der SPAs • Navigation zwischen SPAs ist zu langsam 18.03.2019 28
  • 29. Hürde «Performance» - Loading • Angular + Angularjs + ngUpgrade + Viel Code • Modularisierung • Angular Migration • AnuglarJs und ngUpgrade fallen weg, dafür haben wir Treeshaking Laden • Anuglar + AngularJS • Angular MigrationInitialisierung • Offline Anforderung • Lazy loading • Sync zu Async Rewrite (Aufwand Gross) Bereitstellung Stammdaten • AngularJS • Angular MigrationRendering 18.03.2019 29
  • 30. Hürde «Performance» - Dilemma • Angular Migration nötig • Wegen Performance Modularisierung • Modularisierung nötig • Wegen Individuellem LifeCycle Angular Migration 18.03.2019 30
  • 31. Hürde «Performance» - Tablösung • Chrome Extension • Navigation wird abgefangen • Zuordnung von Root-Context zu Bowser-Tab Wie? • SPAs bleiben geladen, • mehrfache Initialisierung entfällt.Hilfts? • Bis die SPAs schnell laden • Migration und Modularisierung entsprechend fortgeschritten sind. Wie lange? 18.03.2019 31
  • 33. Rückblick – Ziel erreicht? Koordination / Komplexität Lokale Änderung -> Lokale Auswirkungen Unabhängiges Releasing •Libs verhindern wirklich unabhängiges Releasing LifeCycle •Libs erzwingen orchestrierten LifeCycle Freiheit in der App Architektur •Angular ist gesetzt Schneidung •SPAs sind keine Micro Frontends 18.03.2019 33
  • 34. Ausblick – Web Components Mit Angular Elements Standardisierter Build-Prozess Unabhängiges Releasing Unabhängiger LifeCycle Die Micro Frontends 18.03.2019 34
  • 35. Nächste Schritte 18.03.2019 35 • Erlaubt Angular-Only SPAs Angular Migration zentraler Libs • Wir bleiben dran Update Angular 7 auf Angular 8 • Siehe Vision Experimente mit Angular Elements • Wie gesund sind unsere Frontends Observability im Frontend
  • 37. Haben wir Zeit für Fragen 18.03.2019 37