RN chạy hai luồng chính, mỗi luồng đều cần đạt ~60fps (16ms/frame):
- JS thread: chạy logic React, xử lý sự kiện, quyết định UI. Nếu bận (tính toán nặng, render list lớn, quá nhiều
console.log), JS không kịp trả frame → giật khi cuộn/tương tác. - UI (native/main) thread: đo đạc, vẽ, xử lý animation native. Nghẽn khi tạo/biến đổi quá nhiều view.
Nguyên nhân & cách giảm jank:
- Test trên bản release (dev mode chậm hơn nhiều).
- Gỡ console.log ở production; đẩy việc nặng ra khỏi lúc animation (InteractionManager).
- Dùng list ảo hóa (FlatList + getItemLayout), tránh re-render thừa.
- Animation nên chạy native (useNativeDriver hoặc Reanimated) để không phụ thuộc JS thread.
Hay hỏi: vì sao animation trên JS thread dễ giật hơn native.