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
0
240
Angular‘s Future with Ivy @ngPoland 2020
Manfred Steyer
PRO
November 19, 2020
Tweet
Share
More Decks by Manfred Steyer
See All by Manfred Steyer
Advanced Micro Frontends: Multi Version/ Framework Scenarios
manfredsteyer
PRO
0
330
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
620
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
490
The Missing Link in Angular‘s Signal Story Resource API and httpResource @ngRome 2025
manfredsteyer
PRO
0
160
Your Architecture as a Crime Scene:Forensic Analysis
manfredsteyer
PRO
0
220
Rethinking Data Access: The New httpResource in Angular
manfredsteyer
PRO
0
360
Reactive Thinking with Signals, Resource API, and httpResource @Devm.io Angular 20 Launch Party
manfredsteyer
PRO
0
240
JavaScript as a Crime SceneForensic Analysis
manfredsteyer
PRO
0
130
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @jax2025 in Mainz, Germany
manfredsteyer
PRO
0
230
Other Decks in Programming
See All in Programming
速いWebフレームワークを作る
yusukebe
5
1.7k
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
250
rage against annotate_predecessor
junk0612
0
170
Improving my own Ruby thereafter
sisshiki1969
1
160
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
850
ソフトウェアテスト徹底指南書の紹介
goyoki
1
150
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
320
Namespace and Its Future
tagomoris
6
700
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
120
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
140
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
200
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
530
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.5k
Faster Mobile Websites
deanohume
309
31k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
A Modern Web Designer's Workflow
chriscoyier
696
190k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Visualization
eitanlees
148
16k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
112
20k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Code Reviewing Like a Champion
maltzj
525
40k
How GitHub (no longer) Works
holman
315
140k
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