Chào mừng các bạn quay trở lại với series về Change Detection trong Angular. Trong bài này, chúng ta sẽ tìm hiểu về Change Detection Strategy và cách nó ảnh hưởng đến performance ứng dụng.
Table of contents
Open Table of contents
Change Detection Strategy là gì?
Change Detection Strategy xác định cách Angular kiểm tra và cập nhật các thay đổi trong component. Angular cung cấp hai strategy chính:
- Default
- OnPush
Default Strategy
Đây là chiến lược mặc định của Angular.
Đặc điểm:
- Kiểm tra mọi binding trong component và các component con mỗi khi Change Detection cycle chạy.
- Đảm bảo UI luôn được cập nhật, nhưng có thể ảnh hưởng đến performance với ứng dụng lớn.
Khi nào Change Detection được kích hoạt (Default mode):
- DOM event (click, submit, …)
- HTTP requests
- Timers (setTimeout, setInterval)
- Promises
- Observables
OnPush Strategy
OnPush là chiến lược tối ưu hóa performance.
Cách sử dụng:
Đặc điểm:
- Chỉ chạy Change Detection khi input references thay đổi hoặc có event được emit từ component hoặc các phần tử con.
- Giúp giảm số lượng kiểm tra, cải thiện performance đáng kể.
Khi nào Change Detection được kích hoạt (OnPush mode):
- Input reference thay đổi
- Event được emit từ component hoặc các phần tử con
- Sử dụng Async pipe trong template
- Manually trigger Change Detection (sẽ được đề cập trong bài 3)
Làm việc với OnPush Strategy
1. Immutability
Khi sử dụng OnPush, việc làm việc với dữ liệu immutable trở nên quan trọng:
2. Observable và Async Pipe
Sử dụng Async pipe với OnPush strategy:
Async pipe tự động subscribe, unsubscribe và kích hoạt Change Detection khi có dữ liệu mới.
3. EventEmitter
EventEmitter vẫn kích hoạt Change Detection trong OnPush components:
Kết luận
Change Detection Strategy là công cụ mạnh mẽ để tối ưu hóa performance ứng dụng Angular. OnPush strategy có thể giúp cải thiện đáng kể performance, đặc biệt trong các ứng dụng lớn và phức tạp.
Trong bài tiếp theo, chúng ta sẽ đi sâu vào ChangeDetectorRef và cách manual trigger Change Detection trong các tình huống cụ thể.
Bài viết và video tham khảo
Angular in depth: Everything you need to know about change detection in AngularDecoded Frontend: Change Detection in Angular