SlideShare a Scribd company logo
Challenges of
Angular in production
Tasos Bekos
Frontend Architect @ ZuluTrade
Tasos Bekos
Frontend Architect
ZuluTrade Angular-UI Bootstrapng-lightning
@tbekos
@bekos
Why Angular?
 Dependency Injection (DI)
 Template syntax
 Universal (SSR)
 Google Team/AngularJS
VS
Problems we faced
 Learning curve
 Training / Recruiting
 Breaking changes
 Missing libraries / resources
ng-lightning (https://github.com/ng-lightning/ng-lightning)
Angular components & directives for Salesforce's Lightning Design System.
 Stateless functional components
 Accessibility
Great for collaboration
 Declarative syntax
 Designer friendly
 Typescript
 Decorators
Application Architecture
 Maintainability
 Scalability
 Performance
“...decisions that are hard to change”
Martin Fowler
Maintainability
 Testability
 Karma
 Protractor
 Automation
 Build: Webpack / Gulp
 Deployment: Jenkins
 Pair programming / Code reviews
Scalability
 Redux (ngrx/store)
 Explicit update
 DevTools plugin
 Vertical separation of concerns
 Modules
 Typescript / Templates
 Horizontal separation of concerns
 Components
 Services
 API layer (Facade to backend services)
 Store layer (Reducers)
Pure UI Components (onPush)
Container UI components (async pipe)
Services
Store API services (Facade)Reducer
Stream of immutable state slices
ActionState Backend response
Function calls
Parameters
High level action/data flow
@Output@Input
Performance
 Startup
 Download time
 Parse and compile time
 Runtime
 Javascript / CSS calculations
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Startup Performance
1. Measure and inspect
2. Reduce size
3. Optimize code & delivery
4. Lazy loading
Measure & inspect
 webpagetest.org
 Chrome Timeline
 Webpack Bundle Analyzer
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Reduce size
 Do not overuse libraries
 You don't (may not) need Lodash
 Make use of native
 Replicate small stuff
 Reward good behaviour
 Polyfill.io
 Don’t overuse components
 Can we achieve the same result with HTML/CSS?
 Typescript helpers
 --importHelpers with --noEmitHelpers
import { Observable } from ‘rxjs/Rx';
import { find } from ‘lodash';
import { Observable } from ‘rxjs/Observable';
import find from ‘lodash-es/find'; // Just use ES6 find!!
Modular libraries
Optimize code & delivery
 Precompilation
 Ahead of Time compilation
 optimize-js
 Treeshaking
 Webpack 2
 Closure
 CDN
 publicPath: `https://mycdn.com/`
Lazy loading
 Code splitting
 Router
 System.import / import()
 Modals, Tabs, ...
 preload, prefetch
 preloadingStrategy: PreloadAllModules
 GoogleChrome/preload-webpack-plugin
 Timing 3rd party dependencies
 Wrap external libraries, take advantage of lifecycle hooks
const routes: Routes = [
...
{ path: 'trader', loadChildren: './trader/trader.module#ZlTraderModule?chunkName=trader' },
];
plugins = [
...
new HtmlWebpackPlugin(),
new PreloadWebpackPlugin({
rel: ‘prefetch’,
as: ‘script’
include: [‘trader’],
})
];
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Challenges of angular in production (Tasos Bekos) - GreeceJS #17
Runtime Performance
 enableProdMode
 Ahead of Time compilation (AoT)
 Change detection
 OnPush
 detach/reattach
 Τake advantage of Router
 Reduce DOM size
 NgZone: runOutsideAngular
 Pure pipes, trackBy…
Future
i18n during compilation time
Service workers
Server side rendering
Angular ^4
Closure compiler for AoT
Thank you!
Ad

More Related Content

What's hot (20)

Host, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server AppsHost, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server Apps
Jose Javier Columbie
 
Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.
John Dalziel
 
Introduction to blogging with Jekyll
Introduction to blogging with JekyllIntroduction to blogging with Jekyll
Introduction to blogging with Jekyll
Eric Lathrop
 
Jekyll, static websites generator
Jekyll, static websites generatorJekyll, static websites generator
Jekyll, static websites generator
Francesco Napoletano
 
UXify 2015 - Front-end Developers' Checklist for Better UX
UXify 2015 - Front-end Developers' Checklist for Better UXUXify 2015 - Front-end Developers' Checklist for Better UX
UXify 2015 - Front-end Developers' Checklist for Better UX
Stoian Dipchikov
 
Evolution of java script libraries
Evolution of java script librariesEvolution of java script libraries
Evolution of java script libraries
Columbia Developers Guild
 
Jekyll Presentation Slides
Jekyll Presentation SlidesJekyll Presentation Slides
Jekyll Presentation Slides
Curtis Miller
 
Introdcution to Adobe CQ
Introdcution to Adobe CQIntrodcution to Adobe CQ
Introdcution to Adobe CQ
Rest West
 
How to build a web application with Polymer
How to build a web application with PolymerHow to build a web application with Polymer
How to build a web application with Polymer
Sami Suo-Heikki
 
Polymer and web component
Polymer and web componentPolymer and web component
Polymer and web component
Imam Raza
 
T5 Oli Aro
T5 Oli AroT5 Oli Aro
T5 Oli Aro
Javier Toledo
 
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi   SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
Sencha
 
Cloud browser testing with Gradle and Geb
Cloud browser testing with Gradle and GebCloud browser testing with Gradle and Geb
Cloud browser testing with Gradle and Geb
David Carr
 
Ch. x web performance
Ch. x web performanceCh. x web performance
Ch. x web performance
Manolis Vavalis
 
Amazon.com's Web Services Opportunity
Amazon.com's Web Services OpportunityAmazon.com's Web Services Opportunity
Amazon.com's Web Services Opportunity
Tim O'Reilly
 
About Caching
About CachingAbout Caching
About Caching
Weng Wei
 
Polymer
PolymerPolymer
Polymer
LearningTech
 
Expert guide for PHP
Expert guide for PHPExpert guide for PHP
Expert guide for PHP
Steve Fort
 
Adobe AEM for Business Heads
Adobe AEM for Business HeadsAdobe AEM for Business Heads
Adobe AEM for Business Heads
Yash Mody
 
Javascript Myths and its Evolution
Javascript Myths and its  EvolutionJavascript Myths and its  Evolution
Javascript Myths and its Evolution
Deepu S Nath
 
Host, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server AppsHost, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server Apps
Jose Javier Columbie
 
Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.Fast Slim Correct: The History and Evolution of JavaScript.
Fast Slim Correct: The History and Evolution of JavaScript.
John Dalziel
 
Introduction to blogging with Jekyll
Introduction to blogging with JekyllIntroduction to blogging with Jekyll
Introduction to blogging with Jekyll
Eric Lathrop
 
UXify 2015 - Front-end Developers' Checklist for Better UX
UXify 2015 - Front-end Developers' Checklist for Better UXUXify 2015 - Front-end Developers' Checklist for Better UX
UXify 2015 - Front-end Developers' Checklist for Better UX
Stoian Dipchikov
 
Jekyll Presentation Slides
Jekyll Presentation SlidesJekyll Presentation Slides
Jekyll Presentation Slides
Curtis Miller
 
Introdcution to Adobe CQ
Introdcution to Adobe CQIntrodcution to Adobe CQ
Introdcution to Adobe CQ
Rest West
 
How to build a web application with Polymer
How to build a web application with PolymerHow to build a web application with Polymer
How to build a web application with Polymer
Sami Suo-Heikki
 
Polymer and web component
Polymer and web componentPolymer and web component
Polymer and web component
Imam Raza
 
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi   SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
Sencha
 
Cloud browser testing with Gradle and Geb
Cloud browser testing with Gradle and GebCloud browser testing with Gradle and Geb
Cloud browser testing with Gradle and Geb
David Carr
 
Amazon.com's Web Services Opportunity
Amazon.com's Web Services OpportunityAmazon.com's Web Services Opportunity
Amazon.com's Web Services Opportunity
Tim O'Reilly
 
About Caching
About CachingAbout Caching
About Caching
Weng Wei
 
Expert guide for PHP
Expert guide for PHPExpert guide for PHP
Expert guide for PHP
Steve Fort
 
Adobe AEM for Business Heads
Adobe AEM for Business HeadsAdobe AEM for Business Heads
Adobe AEM for Business Heads
Yash Mody
 
Javascript Myths and its Evolution
Javascript Myths and its  EvolutionJavascript Myths and its  Evolution
Javascript Myths and its Evolution
Deepu S Nath
 

Viewers also liked (6)

The case for HTTP/2
The case for HTTP/2The case for HTTP/2
The case for HTTP/2
GreeceJS
 
Ellak JavaScript Day
Ellak JavaScript DayEllak JavaScript Day
Ellak JavaScript Day
GreeceJS
 
The history of asynchronous JavaScript
The history of asynchronous JavaScriptThe history of asynchronous JavaScript
The history of asynchronous JavaScript
GreeceJS
 
The tools & technologies behind Resin.io
The tools & technologies behind Resin.ioThe tools & technologies behind Resin.io
The tools & technologies behind Resin.io
GreeceJS
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
GreeceJS
 
Javascript sucks & frontend challenges @ClearSlide | while42 SF #7
Javascript sucks & frontend challenges @ClearSlide | while42 SF #7Javascript sucks & frontend challenges @ClearSlide | while42 SF #7
Javascript sucks & frontend challenges @ClearSlide | while42 SF #7
While42
 
The case for HTTP/2
The case for HTTP/2The case for HTTP/2
The case for HTTP/2
GreeceJS
 
Ellak JavaScript Day
Ellak JavaScript DayEllak JavaScript Day
Ellak JavaScript Day
GreeceJS
 
The history of asynchronous JavaScript
The history of asynchronous JavaScriptThe history of asynchronous JavaScript
The history of asynchronous JavaScript
GreeceJS
 
The tools & technologies behind Resin.io
The tools & technologies behind Resin.ioThe tools & technologies behind Resin.io
The tools & technologies behind Resin.io
GreeceJS
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
GreeceJS
 
Javascript sucks & frontend challenges @ClearSlide | while42 SF #7
Javascript sucks & frontend challenges @ClearSlide | while42 SF #7Javascript sucks & frontend challenges @ClearSlide | while42 SF #7
Javascript sucks & frontend challenges @ClearSlide | while42 SF #7
While42
 
Ad

Similar to Challenges of angular in production (Tasos Bekos) - GreeceJS #17 (20)

Vue3: nuove funzionalità, differenze e come migrare
Vue3: nuove funzionalità, differenze e come migrareVue3: nuove funzionalità, differenze e come migrare
Vue3: nuove funzionalità, differenze e come migrare
Andrea Campaci
 
Technology Stack Discussion
Technology Stack DiscussionTechnology Stack Discussion
Technology Stack Discussion
Zaiyang Li
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
Gil Fink
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Codemotion
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
Matt Raible
 
Onion Architecture with S#arp
Onion Architecture with S#arpOnion Architecture with S#arp
Onion Architecture with S#arp
Gary Pedretti
 
Leveraging the Power of Custom Elements in Gutenberg
Leveraging the Power of Custom Elements in GutenbergLeveraging the Power of Custom Elements in Gutenberg
Leveraging the Power of Custom Elements in Gutenberg
Felix Arntz
 
Viridians on Rails
Viridians on RailsViridians on Rails
Viridians on Rails
Viridians
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
Scala Italy
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
Alberto Paro
 
Dot NET Solution Architect Roadmap By Scholarhat PDF
Dot NET Solution Architect Roadmap By Scholarhat PDFDot NET Solution Architect Roadmap By Scholarhat PDF
Dot NET Solution Architect Roadmap By Scholarhat PDF
Scholarhat
 
ReactJS or Angular
ReactJS or AngularReactJS or Angular
ReactJS or Angular
boyney123
 
Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
Lucas Jellema
 
D22 portlet development with open source frameworks
D22 portlet development with open source frameworksD22 portlet development with open source frameworks
D22 portlet development with open source frameworks
Sunil Patil
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source Frameworks
Sunil Patil
 
Sexy React Stack
Sexy React StackSexy React Stack
Sexy React Stack
KMS Technology
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoon
Jesang Yoon
 
My weekend startup: seocrawler.co
My weekend startup: seocrawler.coMy weekend startup: seocrawler.co
My weekend startup: seocrawler.co
Hrvoje Hudoletnjak
 
1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb
Leo Zhou
 
Brane.Storm
Brane.StormBrane.Storm
Brane.Storm
kturgut
 
Vue3: nuove funzionalità, differenze e come migrare
Vue3: nuove funzionalità, differenze e come migrareVue3: nuove funzionalità, differenze e come migrare
Vue3: nuove funzionalità, differenze e come migrare
Andrea Campaci
 
Technology Stack Discussion
Technology Stack DiscussionTechnology Stack Discussion
Technology Stack Discussion
Zaiyang Li
 
Stencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrivedStencil the time for vanilla web components has arrived
Stencil the time for vanilla web components has arrived
Gil Fink
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Codemotion
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
Matt Raible
 
Onion Architecture with S#arp
Onion Architecture with S#arpOnion Architecture with S#arp
Onion Architecture with S#arp
Gary Pedretti
 
Leveraging the Power of Custom Elements in Gutenberg
Leveraging the Power of Custom Elements in GutenbergLeveraging the Power of Custom Elements in Gutenberg
Leveraging the Power of Custom Elements in Gutenberg
Felix Arntz
 
Viridians on Rails
Viridians on RailsViridians on Rails
Viridians on Rails
Viridians
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
Scala Italy
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
Alberto Paro
 
Dot NET Solution Architect Roadmap By Scholarhat PDF
Dot NET Solution Architect Roadmap By Scholarhat PDFDot NET Solution Architect Roadmap By Scholarhat PDF
Dot NET Solution Architect Roadmap By Scholarhat PDF
Scholarhat
 
ReactJS or Angular
ReactJS or AngularReactJS or Angular
ReactJS or Angular
boyney123
 
Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
Lucas Jellema
 
D22 portlet development with open source frameworks
D22 portlet development with open source frameworksD22 portlet development with open source frameworks
D22 portlet development with open source frameworks
Sunil Patil
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source Frameworks
Sunil Patil
 
node.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoonnode.js 실무 - node js in practice by Jesang Yoon
node.js 실무 - node js in practice by Jesang Yoon
Jesang Yoon
 
My weekend startup: seocrawler.co
My weekend startup: seocrawler.coMy weekend startup: seocrawler.co
My weekend startup: seocrawler.co
Hrvoje Hudoletnjak
 
1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb1.6 米嘉 gobuildweb
1.6 米嘉 gobuildweb
Leo Zhou
 
Brane.Storm
Brane.StormBrane.Storm
Brane.Storm
kturgut
 
Ad

More from GreeceJS (13)

Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
GreeceJS
 
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
GreeceJS
 
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
GreeceJS
 
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
GreeceJS
 
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
GreeceJS
 
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
GreeceJS
 
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
GreeceJS
 
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
GreeceJS
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
GreeceJS
 
The JavaScript toolset for development on Ethereum
The JavaScript toolset for development on EthereumThe JavaScript toolset for development on Ethereum
The JavaScript toolset for development on Ethereum
GreeceJS
 
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
GreeceJS
 
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
GreeceJS
 
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
GreeceJS
 
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
GreeceJS
 
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
Next.js and the pursuit of happiness (Dimitris Michalakos, Lead Developer at ...
GreeceJS
 
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
An Emoji Introduction to React Native (Panagiotis Vourtsis, Senior Front End ...
GreeceJS
 
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
Under the hood of RxJS (Dimitris Livas) - GreeceJS #27
GreeceJS
 
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
All About GRAND Stack: GraphQL, React, Apollo, and Neo4j (Mark Needham) - Gre...
GreeceJS
 
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
Cross platform engineering - Lessons Learned (Michael Asimakopoulos, Valadis ...
GreeceJS
 
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
TypeScript: JavaScript that scales (Kostas Stergiou) - GreeceJS #22
GreeceJS
 
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
Migrating from Monolithic to Serverless (Kostas Katsikas) - GreeceJS #22
GreeceJS
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
GreeceJS
 
The JavaScript toolset for development on Ethereum
The JavaScript toolset for development on EthereumThe JavaScript toolset for development on Ethereum
The JavaScript toolset for development on Ethereum
GreeceJS
 
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
Modern web development and accessibility (Christina Papadimitriou, Nadia Mark...
GreeceJS
 
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
Cycle.js - Functional reactive UI framework (Nikos Kalogridis)
GreeceJS
 
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
GreeceJS
 

Recently uploaded (20)

AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.
gregtap1
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Automation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From AnywhereAutomation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From Anywhere
Lynda Kane
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.
gregtap1
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Automation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From AnywhereAutomation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From Anywhere
Lynda Kane
 

Challenges of angular in production (Tasos Bekos) - GreeceJS #17

  • 1. Challenges of Angular in production Tasos Bekos Frontend Architect @ ZuluTrade
  • 2. Tasos Bekos Frontend Architect ZuluTrade Angular-UI Bootstrapng-lightning @tbekos @bekos
  • 3. Why Angular?  Dependency Injection (DI)  Template syntax  Universal (SSR)  Google Team/AngularJS
  • 4. VS
  • 5. Problems we faced  Learning curve  Training / Recruiting  Breaking changes  Missing libraries / resources
  • 6. ng-lightning (https://github.com/ng-lightning/ng-lightning) Angular components & directives for Salesforce's Lightning Design System.  Stateless functional components  Accessibility
  • 7. Great for collaboration  Declarative syntax  Designer friendly  Typescript  Decorators
  • 8. Application Architecture  Maintainability  Scalability  Performance “...decisions that are hard to change” Martin Fowler
  • 9. Maintainability  Testability  Karma  Protractor  Automation  Build: Webpack / Gulp  Deployment: Jenkins  Pair programming / Code reviews
  • 10. Scalability  Redux (ngrx/store)  Explicit update  DevTools plugin  Vertical separation of concerns  Modules  Typescript / Templates  Horizontal separation of concerns  Components  Services  API layer (Facade to backend services)  Store layer (Reducers)
  • 11. Pure UI Components (onPush) Container UI components (async pipe) Services Store API services (Facade)Reducer Stream of immutable state slices ActionState Backend response Function calls Parameters High level action/data flow @Output@Input
  • 12. Performance  Startup  Download time  Parse and compile time  Runtime  Javascript / CSS calculations
  • 14. Startup Performance 1. Measure and inspect 2. Reduce size 3. Optimize code & delivery 4. Lazy loading
  • 15. Measure & inspect  webpagetest.org  Chrome Timeline  Webpack Bundle Analyzer
  • 18. Reduce size  Do not overuse libraries  You don't (may not) need Lodash  Make use of native  Replicate small stuff  Reward good behaviour  Polyfill.io  Don’t overuse components  Can we achieve the same result with HTML/CSS?  Typescript helpers  --importHelpers with --noEmitHelpers
  • 19. import { Observable } from ‘rxjs/Rx'; import { find } from ‘lodash'; import { Observable } from ‘rxjs/Observable'; import find from ‘lodash-es/find'; // Just use ES6 find!! Modular libraries
  • 20. Optimize code & delivery  Precompilation  Ahead of Time compilation  optimize-js  Treeshaking  Webpack 2  Closure  CDN  publicPath: `https://mycdn.com/`
  • 21. Lazy loading  Code splitting  Router  System.import / import()  Modals, Tabs, ...  preload, prefetch  preloadingStrategy: PreloadAllModules  GoogleChrome/preload-webpack-plugin  Timing 3rd party dependencies  Wrap external libraries, take advantage of lifecycle hooks
  • 22. const routes: Routes = [ ... { path: 'trader', loadChildren: './trader/trader.module#ZlTraderModule?chunkName=trader' }, ]; plugins = [ ... new HtmlWebpackPlugin(), new PreloadWebpackPlugin({ rel: ‘prefetch’, as: ‘script’ include: [‘trader’], }) ];
  • 25. Runtime Performance  enableProdMode  Ahead of Time compilation (AoT)  Change detection  OnPush  detach/reattach  Τake advantage of Router  Reduce DOM size  NgZone: runOutsideAngular  Pure pipes, trackBy…
  • 26. Future i18n during compilation time Service workers Server side rendering Angular ^4 Closure compiler for AoT

Editor's Notes

  • #2: Ευχαριστω GreeceJS για φιλοξενία Περι τινος προκειται: Αποφαση με management για μοντερνο stack, απο .ΝΕΤ. Public εδω και λιγο καιρο. Δυσκολη συνύπαρξη. DISCLAIMER: Not framework comparison No Angular tutorial Personal experiences, has worked for us
  • #3: 3 χρονια Frontend Architect ZuluTrade. Opensource active NPM modules Angular UI Bootstrap και τελευταία εχουμε βγάλει opensource το ng-lightning, μια παρόμοια βιβλιοθήκη με UI components σε Angular 2, και βασισμένα στο SLDS και για την όποια θα μιλήσουμε λίγο πιο αναλυτικά και παρακάτω. **** Avatar
  • #4: Γιατι οχι React, Polymer κτλ Κοινα προβληματα για κάθε JS framework, πιο συγκεκριμένα πως τα αντιμετωπίζουμε εμεις στο Angular ecosystem. Πολυ νωρις η αποφαση, Alpha/Beta. Λιγες πληροφορίες. Επιτυχημενη προηγούμενη εμπειρια που είχαμε με το Angular 1. ALL IN ONE = better for enterprises, forms, router, animations, i18n …. DI = responsible to setup the application for you, you just define the dependencies of your service or component in the constructor, and Angular is going to take care of instantiating appropriate object. Βοηθαει στο mocking των dependencies στο testing. Ηδη πολυ ισχυρη, => πιο καθαρή. SSR, απο day 1, ...we care a lot about SEO! Socail trading platform!!! Universal was always lacking behind, has been rewritten several times, and now is migrating to core => ιt will be very easy to use. DOM dehydration? Preboot.js replays events. Ηδη επιτυχια .... Απλώς καλύτερο...Distilled all the best practices of Angular 1.x into Angular 2
  • #5: Give me an estimation! Documentation! Router!!! RC5 => NgModules
  • #6: Angular 1 !== Angular 2 Best practices from community RxJS Redux tsconfig Nα ξερουν ήδη ή να ενδιαφερονται να επενδυσουν σε μια βιβλιοθηκη που ήταν ακομα σε beta και ενω το react ηταν το πιο hot topping εκεινο τον καιρό :-) Ετσι, καταληξαμε στο οτι θα ήταν ευκολοτερο να κανουμε train developers εντος της εταιριας, που και αυτο είχε προβληματα δίοτι απασχολουταν ενας senior developer στο να κάνει train junior, αλλα και δεν εχουν ολοι οι developers το ιδιο skillset ωστε να κανουν adapt τοσο γρηγορα και τοσα πολλα πραγματα όσα απαιτουνται σε μια τετοια αλλαγη. Documentation UI βιβλιοθηκες Router εχει γραφτει 2-3 φορες from scratch, RC5 => NgModules χρειατηκαν πολλες ώρες. AoT Ψυχολογία!
  • #7: Living style guide. Flexbox => Not IE10 Learning resource! Advanced Angular.
  • #8: Tι δούλεψε καλά, και πως η επιλογή του Angular μας βοήθησε. (σε μεγαλο προτζεκτ), διαφορετικα skillset & level Templates => δηλωνουμε το τι θελουμε και αφηνουμε στο framework να αποφασίσει το πως θα το καταφέρει. 1ον λίγοτερη πιθανότητα για bugs 2ον μειώνεται ο χρονος που χρειαζεται να γίνει παραγωγικός. Xωρις coding skills. Πόσοι έχουν την τυχη να δουλευουν με designers που ξέρουν HTML/CSS :-) Developer που ασχολειται με το CSS/styling, ή το responsiveness Τοοls/IDE => autocompletion, navigation, refactoring σε μεγαλα code bases σχετικα ευκολα, και με τη βοηθεια των Languages services μπορουμε να εχουμε autocpmpletion και validation στα templates. Superset της ES6, νοιωθει πολυ “φυσικο” Type system ειναι τελειως optional, έχω παρατηρήσει οτι το προτιμαμε πια Declarative programming μεσα στην TS Γρηγορη κατανόση του σκοπου καθε κλάσης ή καθε property Μείωση του απαιτουμενου κώδικα σε καθε αρχειο.
  • #9: Πολυ high level, αλλα οταν σχεδιαζεις θες: Maintainability => #1 rule, don’t want to rewrite everything every 1 year!, = quality (ie readability, testability, reasoning, περηφανια) Scalability => people and code. If you want performance, you should PLAN for performance. Scale codebase Πρωτοκολλο για τους developers Που βαζω αυτο το κομματι κώδικα? Πως αλλαζω το στατε? Πως επικοινωνω με το backend?
  • #10: Works well with DI Starters/ CLI 1.0 If a senior dev is not mentoring/pairing with other devs, you're wasting critical business value. Eric Elliot ΚΟΣΤΟΣ/ΡΙΣΚΟ
  • #11: Angular provides a nice, declarative way to bind to observables using the async pipe: Separation of concerns => παραλληλη εργασια on different aspects of the same feature….velocity ομαδας Reduce bug leaking Reduce dependencies between Componentized approach…. Ολο UI αναπαρισταται απο δiaφoρα μικρα elements = components = black box, Den mas endiaferei pos einai sxediasmeno/ulopoiimeno eswterika alla μονο πως κανει interact με το εξωτερικο περιβαλλον
  • #12: High level architecture. Living thing...always changing, hope improving. Works for us, may not work for you. Observable.combineLatest(this.list$, this.loading$) It’s a micro library which provides a reactive state management inspired by redux and plays really well with Angular. In short, with @ngrx/store we can think of the redux’s store as a stream of immutable objects. Each time you emit an action which gets handled by a reducer, the new state will be emitted through a stream. The different streams can be filtered, merged, mapped, etc. in a very elegant way. On top of that,
  • #13: Start-up performance matters. A combination of slow parse, compile and execution times can be a real bottleneck for pages that wish to boot-up quickly. NOT minifying CSS, optimizing images, use svg sprites etc. reduce HTTP requests JS => MAIN reason for slowness. Θα δουμε πως μπορουμε να Measure και πως να γινει faster. This is about shipping less JS, or even ship the same JS in different way and/or timing, so we will offer tha same Size is a big factor, NOT the only one. Runtime => an event is happening, button is clicked, socket message, ποση ωρα κανουμε να δείξουμε την αλλαγή?
  • #15: Lazy loading: Spread the functionality of the entire application among: Main bundle which includes functionality used across the entire application. Feature bundles which capture functionality from separate “bounded contexts”.
  • #16: Be a benchmark maniac! Ουδετερος παρατηρητης, μπορεις να τρεξεις με τις ιδιες συνθηκες καθε φορα, πολλα metrics (time to interaction, first meaningful paint…) Works on your machine, suitable for development. See inside your bundles, alternative: source-map-explorer
  • #18: Be a benchmark maniac! Bundle of Doom!
  • #19: Polyfill.io maintained by financial times….It works via User-Agent sniffing to determine the browser being used, then loads the required polyfills. Chrome, Firefox: 1KB, IE11: 20KB, suggested solution for Intl in Safari Modular libraries…. Rxjs/Observable Smaller alternatives Drop Immutable, just Map. Typescript will generate helper code in every one file. This can be a problem when dealing with code coverage or payload size of you library/app
  • #21: Minification, Gzip is out of question  AoT => drop compiler, tree shakeable, template errors early. This reduces the size a bit (but on the other hand we get all the ngfactories). Warning: compilation generates a lot of code! Optimized code, 10x size, 3-4x size gzip, -5x evaluation time, 450KB ~ 50ms => greatest impact over the user experience. The Optimize JS lazy-parsing parens ‘hack’
  • #22: Declarative code splitting with Router per module. Manual code splitting, works well with libraries. Splitting opportunites…per modal, per tab Preload, prefetch => discover resources early, avoid idle times, server can send preload headers! Intercom is 1MB of JS Higharts, Socket…
  • #26: Extreme painting, animations, game? x5 Angular 1 => trading station!!! To avoid unnecessary DOM modifications, the router will reuse the components when the parameters of the corresponding routes change. ngIf, tabs