mcpField
A
angular-performance

angular-performance

github.com/gentleman-programmingDevelopment661350 installsUpdated 31w ago
Repository

About angular-performance

An Angular performance guidance skill for developers, covering image loading, deferred loading, routing, and rendering strategies when building or optimizing applications.

Key features

  1. 01Optimize images with NgOptimizedImage
  2. 02Defer component loading with @defer
  3. 03Configure lazy routes
  4. 04Choose SSR, CSR, or SSG
  5. 05Optimize computations and avoid lifecycle reflows

Use cases

  1. 01Set loading attributes for key images
  2. 02Defer content below the fold
  3. 03Choose rendering modes for page needs

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/gentleman-programming/gentleman-skills --skill angular-performance

After installing, type/angular-performancein Claude Code to confirm it loaded.

Details

From the project README

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 width and height (or fill)
  • Add priority to LCP (Largest Contentful Paint) image
  • Use ngSrc not src
  • Parent of fill image must have position: 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
TriggerWhen to Use
on viewportBelow the fold content
on interactionLoad on click/focus/hover
on idleLoad when browser is idle
on timer(500ms)Load after delay
when conditionLoad 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()
  ]
});
ScenarioUse
SEO critical (blog, e-commerce)SSR
Dashboard/AdminCSR
Static marketing siteSSG/Prerender

Slow Computations

SolutionWhen
Optimize algorithmFirst choice always
Pure pipesCache single result
MemoizationCache multiple results
computed()Derived signal state

NEVER trigger reflows/repaints in lifecycle hooks (ngOnInit, ngAfterViewInit).


Resources

Comments

Markdown supported