Tuning Your
Angular Application
Bonnie Brennan
and
Mateus Carniatto
Bonnie Brennan
Angular GDE
Angular Architect
ngHouston Founder
Angular Air Panelist
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/5538429/Screen_Shot_2018-04-10_at_1.57.14_PM.png)
Mateus Carniatto
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6140196/logo.png)
Angular Expert @ Riaktr
Angular Break the Ice Organizer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6163559/IMG_0778-removebg.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6148797/pasted-from-clipboard.png)
Today we will cover...
- Runtime Performance
- Page Load Speed
- Architecture
Runtime
Performance
Using Async pipe
<ng-container *ngIf="(source$ | async) as data">
<my-component [data]="data"></my-component>
</ng-container>
Advantages
- Unwraps the observable
- Automatically unsubscribes on ngOnDestroy
- Allows to use the 'as' syntax
Title Text
export class SomeComponent implements OnDestroy {
private subs = new SubSink();
...
this.subs.sink = observable$.subscribe(...); // easy syntax
this.subs.add(observable$.subscribe(...)); // if you insist
this.subs.add( // can add multiple subcriptions
observable$.subscribe(...),
anotherObservable$.subscribe(...)
);
...
// Unsubscribe when the component dies
ngOnDestroy() {
this.subs.unsubscribe();
}
}
Using subsink from Ward Bell
Bonus tip
@Component({
selector: 'my-component',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
constructor(private http: HttpClient) {
}
ngOnInit(): void {
// auto completes and unsubscribes after the http request is completed
this.http.get('http://my-data-service/users').subscribe({ ... });
}
}
Page Load Speed
Webpack bundle analyzer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6130592/Screenshot_2019-05-14_at_14.56.06.png)
// from this
// (imports the whole library)
import * as _ from 'lodash' // 23.6kb
// to this
// (imports just the needed)
import chunk as _chunk from 'lodash-es/chunk' // 3kb
Use ES modules version of libraries
Angular CLI Budgets
{
"configurations": {
"production": {
"budgets": [
{
"type": "bundle",
"name": "vendor",
"baseline": "750kb",
"warning": "100kb",
"error": "200kb"
}
]
}
}
}
Import cost for VScode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6130505/import-cost.gif)
Bundle Phobia
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6130530/Screenshot_2019-05-14_at_14.37.30.png)
Architecture
a.k.a. The Sibling Rule
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133854/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133794/styleguide.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133820/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6183575/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133839/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133854/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133851/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6162680/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/969550/images/6133851/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6178802/pasted-from-clipboard.png)
One Last Tip
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6158917/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6159263/pasted-from-clipboard.png)
Thank you!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6183588/Screenshot_2019-05-27_at_15.02.38.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/530295/images/6183590/Screenshot_2019-05-27_at_15.03.21.png)
Matt
@c4rniatto
Bonnie
@bonnster75
ngVikings
By Mateus Carniatto
ngVikings
- 908