angular-performance▌
gentleman-programming/gentleman-skills · updated Apr 8, 2026
NEVER trigger reflows/repaints in lifecycle hooks (ngOnInit, ngAfterViewInit).
NgOptimizedImage (REQUIRED for images)
import { NgOptimizedImage } from '@angular/common';
@Component({
imports: [NgOptimizedImage],
template: `
<!-- LCP image: add priority -->
<img ngSrc="hero.jpg" width="800" height="400" priority>
<!-- Regular: lazy loaded by default -->
<img ngSrc="thumb.jpg" width="200" height="200">
<!-- Fill mode (parent needs position: relative) -->
<img ngSrc="bg.jpg" fill>
<!-- With placeholder -->
<img ngSrc="photo.jpg" width="400" height="300" placeholder>
`
})
Rules
- ALWAYS set
widthandheight(orfill) - Add
priorityto LCP (Largest Contentful Paint) image - Use
ngSrcnotsrc - Parent of
fillimage must haveposition: relative/fixed/absolute
@defer - Lazy Components
@defer (on viewport) {
<heavy-component />
} @placeholder {
<p>Placeholder shown immediately</p>
} @loading (minimum 200ms) {
<spinner />
} @error {
<p>Failed to load</p>
}
Triggers
| Trigger | When to Use |
|---|---|
on viewport |
Below the fold content |
on interaction |
Load on click/focus/hover |
on idle |
Load when browser is idle |
on timer(500ms) |
Load after delay |
when condition |
Load when expression is true |
<!-- Multiple triggers -->
@defer (on viewport; on interaction) {
<comments />
}
<!-- Conditional -->
@defer (when showComments()) {
<comments />
}
Lazy Routes
// Single component
{
path: 'admin',
loadComponent: () => import('./features/admin/admin').then(c => c.AdminComponent)
}
// Feature with child routes
{
path: 'users',
loadChildren: () => import('./features/users/routes').then(m => m.USERS_ROUTES)
}
SSR & Hydration
bootstrapApplication(AppComponent, {
providers: [
provideClientHydration()
]
});
| Scenario | Use |
|---|---|
| SEO critical (blog, e-commerce) | SSR |
| Dashboard/Admin | CSR |
| Static marketing site | SSG/Prerender |
Slow Computations
| Solution | When |
|---|---|
| Optimize algorithm | First choice always |
| Pure pipes | Cache single result |
| Memoization | Cache multiple results |
computed() |
Derived signal state |
NEVER trigger reflows/repaints in lifecycle hooks (ngOnInit, ngAfterViewInit).
Resources
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.8★★★★★54 reviews- ★★★★★Piyush G· Dec 24, 2024
We added angular-performance from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Liam Thomas· Dec 12, 2024
Useful defaults in angular-performance — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Henry Verma· Dec 8, 2024
I recommend angular-performance for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Carlos Martin· Dec 4, 2024
Solid pick for teams standardizing on skills: angular-performance is focused, and the summary matches what you get after install.
- ★★★★★Luis Torres· Nov 27, 2024
Useful defaults in angular-performance — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Aditi Desai· Nov 23, 2024
Registry listing for angular-performance matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Ganesh Mohane· Nov 15, 2024
angular-performance reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Olivia White· Nov 3, 2024
I recommend angular-performance for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Harper Sharma· Nov 3, 2024
angular-performance fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- ★★★★★Aditi Dixit· Oct 22, 2024
Solid pick for teams standardizing on skills: angular-performance is focused, and the summary matches what you get after install.
showing 1-10 of 54