angular-performance について
Angular 開発者向けのパフォーマンス最適化リファレンススキルです。変更検知、遅延読み込み、レンダリング、ゾーンレス機能、バンドルサイズ分析を扱います。
主な機能
- 01OnPush 変更検知
- 02ルートとビューの遅延読み込み
- 03@for ループで項目を追跡
- 04ゾーンレス変更検知の指針
- 05バンドルサイズの分析
活用シーン
- 01不要なコンポーネントチェックの削減
- 02必要になるまでコンポーネントを遅延読み込み
- 03テンプレート内の繰り返し計算を回避
- 04本番ビルドのバンドルサイズを確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oguzhan18/ angular-ecosystem-skills --skill angular-performanceインストール後、Claude Code で/angular-performanceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/discussions/_INDEX.mdreferences/docs/_INDEX.mdreferences/issues/_INDEX.mdreferences/releases/_INDEX.md詳細
Angular のパフォーマンス
バージョン: Angular 21(2025) タグ: パフォーマンス、最適化、バンドルサイズ、変更検知
参考資料: パフォーマンスガイド • 変更検知
API の変更
このセクションでは、最近のバージョン固有の API の変更について説明します。
-
NEW:ゾーンレス変更検知 — zone.js を無効にしてパフォーマンスを向上させます source
-
NEW:遅延可能ビュー(@defer)— コンポーネントのコードを遅延読み込みします
-
NEW:シグナルベースのリアクティビティ — zone.js の代わりにシグナルを使用します
-
NEW:afterNextRender — zone.js を使わずに、レンダリング後にコードを実行します
ベストプラクティス
- OnPush 変更検知戦略を使用します
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
// ...
})
export class MyComponent {}
- @for で trackBy を使用します
@Component({
template: `
@for (item of items; track item.id) {
{{ item.name }}
}
`
})
export class MyComponent {}
- ルートに遅延読み込みを使用します
const routes: Routes = [
{
path: 'dashboard',
loadComponent: () => import('./dashboard/dashboard.component').then(m => m.DashboardComponent)
}
];
- 遅延読み込みには @defer を使用します
@Component({
template: `
@defer (on viewport) {
<heavy-chart-component />
} @placeholder {
<div>Loading...</div>
}
`
})
export class MyComponent {}
- @for ループで trackBy を使用します
@for (item of items; track item.id) {
<li>{{ item.name }}</li>
}
- 純粋パイプを使用します
@Pipe({
name: 'myPipe',
pure: true // Default - only runs when input changes
})
export class MyPipe implements PipeTransform {}
- テンプレート内での関数呼び出しを避けます
// ❌ Bad
{{ calculateTotal() }}
// ✅ Good
{{ total }}
- 画像には ngSrc を使用します
<img [ngSrc]="imageUrl" width="100" height="100" priority>
- 必要に応じて ChangeDetectionRef を手動で使用します
constructor(private cdr: ChangeDetectorRef) {}
updateData() {
this.data = newData;
this.cdr.detectChanges();
}
- サードパーティーライブラリには runOutsideAngular を使用します
import { runOutsideAngular } from '@angular/core/zone';
onClick() {
runOutsideAngular(() => {
this第三方Lib.doSomething();
});
}
- provideZonelessChangeDetection を使用します
export const appConfig: ApplicationConfig = {
providers: [
provideZonelessChangeDetection()
]
};
- 初期化には afterNextRender を使用します
constructor() {
afterNextRender(() => {
// Runs after rendering, outside zone
});
}
- バンドルサイズを最適化します
# Analyze bundle
ng build --stats-json
npx webpack-bundle-analyzer dist/stats.json
- スタンドアロンコンポーネントを使用します
@Component({
standalone: true,
imports: [CommonModule],
// ...
})
export class MyComponent {}
コメント
Markdown 対応