angular-performance について
Angular 開発者向けのパフォーマンスガイドスキルです。アプリの構築や最適化に役立つ、画像読み込み、遅延読み込み、ルーティング、レンダリングの方法をまとめています。
主な機能
- 01NgOptimizedImage による画像最適化
- 02@defer によるコンポーネントの遅延読み込み
- 03遅延ルートの設定
- 04SSR、CSR、SSG の選択
- 05計算の最適化とライフサイクル中の再レイアウト回避
活用シーン
- 01重要な画像の読み込み属性設定
- 02画面下のコンテンツの読み込み延期
- 03ページ要件に応じたレンダリング方式の選択
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gentleman-programming/ gentleman-skills --skill angular-performanceインストール後、Claude Code で/angular-performanceを入力して読み込まれたか確認します。
詳細
NgOptimizedImage(画像では必須)
import { NgOptimizedImage } from '@angular/common';
@Component({
imports: [NgOptimizedImage],
template: `
<img ngSrc="hero.jpg" width="800" height="400" priority>
<img ngSrc="thumb.jpg" width="200" height="200">
<img ngSrc="bg.jpg" fill>
<img ngSrc="photo.jpg" width="400" height="300" placeholder>
`
})
ルール
- 必ず
widthとheight(またはfill)を設定してください - LCP(Largest Contentful Paint)画像に
priorityを追加してください srcではなくngSrcを使用してくださいfill画像の親要素にはposition: relative/fixed/absoluteを設定してください
@defer - 遅延コンポーネント
@defer (on viewport) {
<heavy-component />
} @placeholder {
<p>Placeholder shown immediately</p>
} @loading (minimum 200ms) {
<spinner />
} @error {
<p>Failed to load</p>
}
トリガー
| トリガー | 使用するタイミング |
|---|---|
on viewport | スクロールしないと見えないコンテンツ |
on interaction | クリック/フォーカス/ホバー時に読み込む |
on idle | ブラウザーがアイドル状態のときに読み込む |
on timer(500ms) | 遅延後に読み込む |
when condition | 式が true のときに読み込む |
@defer (on viewport; on interaction) {
<comments />
}
@defer (when showComments()) {
<comments />
}
遅延ルート
// 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 とハイドレーション
bootstrapApplication(AppComponent, {
providers: [
provideClientHydration()
]
});
| シナリオ | 使用する方式 |
|---|---|
| SEO が重要(ブログ、eコマース) | SSR |
| ダッシュボード/管理画面 | CSR |
| 静的なマーケティングサイト | SSG/Prerender |
時間のかかる計算
| 解決策 | 使用するタイミング |
|---|---|
| アルゴリズムの最適化 | 常に最初の選択肢 |
| 純粋パイプ | 単一の結果をキャッシュ |
| メモ化 | 複数の結果をキャッシュ |
computed() | 派生シグナルの状態 |
ライフサイクルフック(ngOnInit、ngAfterViewInit)でリフロー/再描画を絶対に発生させないでください。
リソース
コメント
Markdown 対応