Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Một ứng dụng cuộn không mượt hay phản hồi chậm sẽ bị người dùng bỏ nhanh dù có nhiều tính năng. Giật lag (jank) xảy ra khi ứng dụng không kịp vẽ khung hình mới đúng hạn. Bài viết giải thích nguyên nhân và cách đo, cách sửa hiệu quả.
Màn hình 60Hz làm mới 60 lần mỗi giây, nghĩa là mỗi khung hình có khoảng 16 mili giây để hoàn thành mọi công việc. Màn hình 90Hz hoặc 120Hz còn ít thời gian hơn. Nếu một khung hình mất nhiều hơn ngân sách, bạn thấy hiện tượng khựng.
Luồng giao diện (UI thread hoặc main thread) vừa xử lý cảm ứng vừa vẽ màn hình. Mọi việc nặng như phân tích JSON lớn, xử lý ảnh, đọc ghi tệp lớn, mã hóa hay tính toán phức tạp nên chuyển sang luồng khác.
// Flutter: chuyển việc nặng sang isolate riêng
import 'dart:convert';
import 'package:flutter/foundation.dart';
List<dynamic> parseJson(String text) => jsonDecode(text) as List<dynamic>;
Future<List<dynamic>> loadBigList(String text) {
return compute(parseJson, text);
}
// Kotlin: chạy việc nặng ngoài luồng chính
viewModelScope.launch {
val result = withContext(Dispatchers.Default) {
heavyCalculation()
}
_state.value = result
}
Đừng đoán, hãy đo bằng công cụ có sẵn:
Hãy thử trên điện thoại cấu hình thấp, vì thiết bị mạnh che giấu nhiều vấn đề.
// Dùng const để Flutter bỏ qua việc dựng lại widget bất biến
const Padding(
padding: EdgeInsets.all(16),
child: Text('Tiêu đề cố định'),
)
// Giới hạn vùng vẽ lại bằng RepaintBoundary cho phần hay thay đổi
RepaintBoundary(
child: AnimatedWidgetThatChangesOften(),
)
Cảm nhận đầu tiên của người dùng là thời gian mở ứng dụng. Hãy trì hoãn việc khởi tạo không cần thiết, tải dữ liệu sau khi hiện màn hình đầu, và dùng màn hình khởi động nhẹ. Tránh gọi nhiều dịch vụ tuần tự ngay khi mở.
Hiệu năng không chỉ là tốc độ. Hạn chế cập nhật vị trí liên tục, thăm dò máy chủ dày đặc, và đánh thức thiết bị không cần thiết. Gom nhóm yêu cầu mạng và tận dụng bộ nhớ đệm giúp tiết kiệm cả pin lẫn dữ liệu di động.
Giữ luồng chính nhẹ, vẽ lại đúng chỗ cần vẽ và luôn đo bằng công cụ trên thiết bị thật là ba thói quen mang lại hiệu quả nhất. Tối ưu sớm theo cảm tính thường tốn thời gian mà ít tác dụng.
Hiệu năng dễ xuống cấp dần theo từng tính năng mới. Hãy lập một bộ kịch bản kiểm tra cố định như mở ứng dụng, cuộn danh sách dài, chuyển tab, rồi đo định kỳ trên một thiết bị cấu hình thấp làm chuẩn. Ghi lại số liệu mỗi bản phát hành để thấy xu hướng. Khi có bản nào làm chỉ số xấu đi rõ rệt, hãy xem lại các thay đổi của bản đó trước khi phát hành. Thói quen này rẻ hơn rất nhiều so với việc sửa sau khi người dùng phàn nàn.
Để học các kỹ thuật tối ưu qua dự án thực tế, bạn có thể tham khảo khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment