Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Angular‘s Future with Ivy @ngPoland 2020
Search
Manfred Steyer
PRO
November 19, 2020
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Angular‘s Future with Ivy @ngPoland 2020
Manfred Steyer
PRO
November 19, 2020
More Decks by Manfred Steyer
See All by Manfred Steyer
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
370
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
170
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
250
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
270
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
190
Agentic UI
manfredsteyer
PRO
0
280
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
320
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
270
Agentic AI in the Frontend: Architectures with Open Standards @iJS London 2026
manfredsteyer
PRO
0
200
Other Decks in Programming
See All in Programming
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
570
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.8k
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
210
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
520
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
330
Flow は今どうなっているか
mizdra
PRO
0
610
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
420
VibeCodingからAgenticWorkflowへ
starfish719
0
620
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
240
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
150
FDEが実現するAI駆動経営の現在地
gonta
2
290
バグを直したら useEffect が消えた
colorful12
3
610
Featured
See All Featured
Done Done
chrislema
186
16k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
250
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Prompt Engineering for Job Search
mfonobong
0
410
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
470
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.2k
Transcript
@ManfredSteyer ManfredSteyer Manfred Steyer, ANGULARarchitects.io Angular‘s Future with Ivy: Outlooks
and Prophecies
@ManfredSteyer Ivy Compiler Leads to Smaller Bundles Up to 40%
less bundle size!
@ManfredSteyer
@ManfredSteyer DEMO
@ManfredSteyer
@ManfredSteyer Contents Lazy Components Dynamic Components Higher Order Components Standalone
Components Zone-less Angular
@ManfredSteyer Manfred Steyer
@ManfredSteyer
@ManfredSteyer Lazy Load an Ivy Component import('../dashboard-tile/dashboard-tile.component').then(m => { […]
}
@ManfredSteyer Lazy Load an Ivy Component import('../dashboard-tile/dashboard-tile.component').then(m => { const
comp = m.DashboardTileComponent; […] }
@ManfredSteyer Lazy Load an Ivy Component import('../dashboard-tile/dashboard-tile.component').then(m => { const
comp = m.DashboardTileComponent; const factory = this.cfr.resolveComponentFactory(comp); […] } ComponentFactoryResolver (Injected)
@ManfredSteyer Lazy Load an Ivy Component import('../dashboard-tile/dashboard-tile.component').then(m => { const
comp = m.DashboardTileComponent; const factory = this.cfr.resolveComponentFactory(comp); const compRef = this.viewContainer.createComponent( factory, null, this.injector); } Get via @ViewChild(…)
@ManfredSteyer DEMO
@ManfredSteyer
@ManfredSteyer Why Does This Work with Ivy? With Ivy, the
component is self-describing Remember: Component.ɵcmp Principle: Locality Before Ivy: Metadata within NgModules
@ManfredSteyer Potential Lazy Loading ;-) Partial Hydration
@ManfredSteyer Don't use them in production! No guarantees these features
will ever land in Angular!
@ManfredSteyer
@ManfredSteyer Dynamic Component export function create() { […] }
@ManfredSteyer Dynamic Component export function create() { class DynamicComponent implements
OnInit { […] } […] }
@ManfredSteyer Dynamic Component export function create() { class DynamicComponent implements
OnInit { […] } […] DynamicComponent.ɵcmp = […]; […] }
@ManfredSteyer Dynamic Component export function create() { class DynamicComponent implements
OnInit { […] } […] DynamicComponent.ɵcmp = […]; return DynamicComponent; }
@ManfredSteyer Higher-Order Component export function create(otherComponent: Type<any>) { class DynamicComponent
implements OnInit { […] } […] DynamicComponent.ɵcmp = […]; return DynamicComponent; }
@ManfredSteyer Higher-Order Component export function create(otherComponent: Type<any>) { class DynamicComponent
implements OnInit { […] } […] DynamicComponent.ɵcmp = […]; return DynamicComponent; } Call otherComponent in template function
@ManfredSteyer DEMO
@ManfredSteyer Potential More dynamic Framework extensions
@ManfredSteyer
@ManfredSteyer Composing Components DashboardTileComponent 3x BarComponent
@ManfredSteyer Defining a Component's "Neighborhood" DashboardTileComponent.ɵcmp
@ManfredSteyer Defining a Component's "Neighborhood" DashboardTileComponent.ɵcmp.directiveDefs = [ […] ];
@ManfredSteyer Defining a Component's "Neighborhood" DashboardTileComponent.ɵcmp.directiveDefs = [ BarComponent.ɵcmp ];
Type Assertions ("type casts") not shown here …
@ManfredSteyer Grouping Components import { BarComponent } from "./bar.component"; export
const BAR_COMPONENTS = [ BarComponent, […] ]; index.ts
@ManfredSteyer @Component({ […], deps: [ ...BAR_COMPONENTS ] }) export class
DashboardTileComponent { […] } Proposal
@ManfredSteyer DEMO
@ManfredSteyer
@ManfredSteyer Bootstrapping platformBrowserDynamic().bootstrapModule(AppModule);
@ManfredSteyer Bootstrapping ɵrenderComponent(MyAngularComponent);
@ManfredSteyer Potential Project Structure: Libs and/or Barrels (index.ts) Standalone Components
-> Web Components
@ManfredSteyer
@ManfredSteyer What is Zone.js? Key to automatic change detection Monkey-patches
all browser objects
@ManfredSteyer Downsides 100+ KB (uncompressed): Web Components? Money Patching: Magic
Cannot monkey patch native async/ await (ES 2017)
@ManfredSteyer Mark Components as Dirty import { ɵmarkDirty } from
'@angular/core'; […] ɵmarkDirty(this /* <-- Component */);
@ManfredSteyer DEMO
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer Conclusion Fine grained lazy loading --> Partial hydration Dynamic
and higher order components --> Framework extensions Standalone components --> Structure with barrels and libs Zone-less: Future-proof General: More lightweight
@ManfredSteyer "Your future hasn't been written yet!" Emmet Brown, PhD
@ManfredSteyer d Slides & Examples Public: Frankfurt, Munich, Vienna In-House:
everywhere