0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Top 10 Kỹ Thuật Tối Ưu Hiệu Suất Cho Ứng Dụng Angular

Đăng vào 1 tuần trước

• 4 phút đọc

Giới thiệu

Hiệu suất ứng dụng web là yếu tố quan trọng để giữ chân người dùng trong thời đại công nghệ ngày nay. Khi phát triển ứng dụng với Angular, việc tối ưu hóa hiệu suất không chỉ giúp tăng tốc độ tải trang mà còn cải thiện trải nghiệm người dùng.

Bài viết này sẽ giới thiệu cho bạn 10 kỹ thuật tối ưu hiệu suất trong Angular, giúp bạn xây dựng những ứng dụng mạnh mẽ và mượt mà hơn. Hãy cùng khám phá những mẹo hữu ích này!

1. Sử Dụng Chiến Lược Change Detection Hợp Lý

Angular sử dụng cơ chế Change Detection để cập nhật giao diện khi có sự thay đổi dữ liệu. Để tối ưu hoá, bạn có thể sử dụng ChangeDetectionStrategy.OnPush để giảm số lần kiểm tra.

Ví dụ

typescript Copy
@Component({
  selector: 'app-child',
  template: `{{ data }}`,
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class ChildComponent {
  @Input() data: any;
}

Lợi ích của cách này là giảm thiểu số lần chạy Change Detection, giúp ứng dụng nhanh hơn rất nhiều.

2. Tối Ưu Danh Sách Với trackBy Trong ngFor

Khi sử dụng *ngFor, bạn nên áp dụng trackBy để tránh render lại toàn bộ danh sách khi chỉ có một phần tử thay đổi.

Ví dụ

typescript Copy
<li *ngFor="let item of items; trackBy: trackByFn">
  {{ item.name }}
</li>

trackByFn(index: number, item: any): number {
  return item.id;
}

Điều này giúp Angular chỉ cập nhật các phần tử thực sự thay đổi, giảm thiểu thao tác DOM.

3. Hạn Chế Change Detection Với NgZone.runOutsideAngular

Trong những trường hợp như sự kiện cuộn hoặc animation, bạn có thể chạy chúng ngoài vùng quản lý của Angular để tối ưu hóa hiệu suất.

Ví dụ

typescript Copy
import { Component, NgZone } from '@angular/core';
@Component({
  selector: 'app-example',
  template: `<div (click)="doSomething()">Click me</div>`
})
export class ExampleComponent {
  constructor(private ngZone: NgZone) {}
  ngOnInit() {
    this.ngZone.runOutsideAngular(() => {
      window.addEventListener('scroll', () => {
        console.log('User is scrolling...');
      });
    });
  }
}

Cách này giúp Angular không kích hoạt Change Detection khi có sự kiện xảy ra, giữ cho ứng dụng mượt mà hơn.

4. Tránh Gọi Hàm Trực Tiếp Trong Template

Khi bạn gọi hàm trực tiếp trong template, hàm đó sẽ được thực thi nhiều lần không cần thiết.

Ví dụ

typescript Copy
<div>{{ value }}</div>

export class ExampleComponent {
  value: number;
  ngOnInit() {
    this.value = this.calculateValue();
  }
  calculateValue(): number {
    return Math.random() * 100;
  }
}

Bằng cách lưu trữ kết quả vào biến, bạn chỉ cần gọi hàm một lần, giúp cải thiện hiệu suất.

5. Áp Dụng Lazy Loading Để Tối Ưu Tải Trang

Lazy loading giúp bạn chỉ tải module khi cần thiết, giảm kích thước ban đầu của ứng dụng.

Ví dụ

typescript Copy
const routes: Routes = [
  { path: 'dashboard', loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule) }
];

Điều này giúp tăng tốc độ tải trang, đặc biệt cho ứng dụng lớn.

6. Tối Ưu Component Với Lazy Loading Trên Standalone Components

Từ Angular 14 trở đi, bạn có thể tải Component theo yêu cầu, giúp giảm thời gian tải.

Ví dụ

typescript Copy
async loadComponent() {
  const { LazyComponent } = await import('./lazy.component');
  this.container.createComponent(LazyComponent);
}

7. Sử Dụng Preloading Strategy Để Tăng Tốc Độ Tải Trang

Dùng Preloading Strategy để tải trước một số module quan trọng giúp cải thiện tốc độ truy cập.

Cách cấu hình

typescript Copy
@NgModule({
  imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })],
  exports: [RouterModule]
})
export class AppRoutingModule {}

8. Giảm Kích Thước Bundle Bằng Tree Shaking Và Tối Ưu Import

Khi import thư viện, hãy chắc chắn bạn chỉ import những gì cần thiết để giảm kích thước bundle.

Ví dụ

typescript Copy
import { shuffle } from 'lodash-es';

9. Tránh Memory Leak Bằng Cách Unsubscribe Observable

Hãy nhớ unsubscribe các Observable để tránh rò rỉ bộ nhớ khi component bị hủy.

Ví dụ

typescript Copy
private destroy$ = new Subject<void>();
ngOnInit() {
  interval(1000).pipe(takeUntil(this.destroy$)).subscribe(() => console.log('Tick'));
}
ngOnDestroy() {
  this.destroy$.next();
  this.destroy$.complete();
}

10. Bật NgOptimizedImage Để Tối Ưu Hình Ảnh

Angular 15+ giới thiệu NgOptimizedImage, giúp cải thiện hiệu suất tải hình ảnh.

Ví dụ

html Copy
<img ngSrc="https://example.com/image.jpg" width="600" height="400">

Kết Luận

Tối ưu hóa hiệu suất trong Angular là điều cần thiết để cải thiện trải nghiệm người dùng. Hãy áp dụng những kỹ thuật trên để giúp ứng dụng của bạn chạy nhanh hơn và ổn định hơn. Bằng cách thực hiện nghiên cứu với Lighthouse hoặc Chrome DevTools, bạn có thể xác định các điểm yếu và cải thiện đáng kể hiệu suất ứng dụng của mình.

Hãy chia sẻ trải nghiệm của bạn về tối ưu hóa Angular trong phần bình luận nhé! Cảm ơn bạn đã đọc bài viết này. Chúc bạn lập trình vui vẻ!!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào