Giới thiệu
ShareChat là một nền tảng mạng xã hội hàng đầu tại Ấn Độ, cho phép người dùng chia sẻ ý kiến, ghi lại cuộc sống và kết bạn bằng ngôn ngữ mẹ đẻ. Các tính năng khác bao gồm phòng trò chuyện và tin nhắn riêng tư, cho phép người dùng chia sẻ video, câu chuyện cười, bài hát và nội dung xã hội khác dựa trên ngôn ngữ. Với sứ mệnh tiên phong trong cuộc cách mạng Internet ở Ấn Độ, ShareChat đang thay đổi cách hàng tỷ người dùng tiếp theo tương tác trên Internet.
Ứng dụng qua các con số
- Hơn 100 triệu lượt tải xuống
- Hơn 180 triệu người dùng hoạt động hằng tháng
- Hơn 32 triệu nhà sáng tạo nội dung
- 15 ngôn ngữ khác nhau ở Ấn Độ
- ~1,5 triệu bài đăng được tạo mỗi ngày
Thách thức
Khi ShareChat phát triển và được hàng nghìn người yêu thích mỗi ngày, ứng dụng này gặp phải một thách thức trong việc liên tục phân phối các khung hình mới, dẫn đến thời gian phản hồi kém và cản trở trải nghiệm người dùng.
Do đó, ứng dụng này đã ghi nhận số lượng khung hình bị bỏ qua hoặc bị trễ (còn gọi là "Jank") tăng lên. Việc khắc phục các vấn đề về Jank bằng cách cải thiện khung hình chậm và bị treo là rất quan trọng để mang lại trải nghiệm liền mạch cho tất cả người dùng. Điều này cũng đóng vai trò quan trọng trong việc giúp người dùng dành nhiều thời gian hơn cho ứng dụng, tăng mức độ tương tác và từ đó cải thiện điểm xếp hạng của ShareChat trên Cửa hàng Play của Android.
Họ đã làm như thế nào
ShareChat đã hợp tác với nhóm quan hệ nhà phát triển của Google để giảm hiện tượng giật và mang lại tác động tích cực đến hoạt động kinh doanh bằng cách cải thiện các khung hình chậm và bị treo (giật) trên ứng dụng. Cụ thể, họ đã nỗ lực cải thiện các vấn đề sau:
Nhóm RecyclerView dùng chung – Thông qua việc lập hồ sơ, chúng tôi nhận thấy việc tạo các ngăn chứa khung hiển thị khác nhau mất nhiều thời gian hơn và để giảm thiểu điều đó, chúng tôi đã tạo một Nhóm RecyclerView dùng chung. Điều này cũng giúp loại bỏ chi phí tạo trình giữ khung hiển thị cho các nguồn cấp dữ liệu tương tự.
Excessive Layout Passesl – Thông qua profiling, cũng nhận thấy rằng một số trình giữ khung hiển thị đang yêu cầu thêm requestLayouts. Để tối ưu hoá, mã đã được cập nhật để lấy giá trị tại thời điểm tạo thay vì mỗi lần liên kết, nhờ đó tiết kiệm chi phí requestLayout bổ sung.
OverDraw – Đơn giản hoá bố cục để giảm số lớp và xoá các màu được đặt riêng cho từng lớp.
Làm phẳng hệ phân cấp – Quan sát thấy tình trạng tăng kích thước bộ nhớ trong thời gian dài thông qua việc lập hồ sơ và kiểm tra thủ công nhiều màn hình. Hệ thống phân cấp đã được đơn giản hoá bằng ConstraintLayout để giải quyết vấn đề này.
Tăng cường quá nhiều lượt xem – Xác định thời gian tăng cường dài cho một số lượt xem nhất định trong khi lập hồ sơ. Các khung hiển thị này đã được chuyển đổi thành các khung hiển thị tạm thời.
Xoá các tác vụ nặng khỏi luồng giao diện người dùng – Việc sử dụng trình phân tích tài nguyên cho phép quan sát một số vị trí nơi các tác vụ nặng đang được thực hiện trên luồng chính, chẳng hạn như tạo SpannableStringBuilder bằng cách gắn thẻ và tạo kiểu cho mọi liên kết recyclerView, giải mã BlurHash, v.v. Các tác vụ này đã được xoá khỏi luồng giao diện người dùng và chuyển sang một luồng nền.
Di chuyển từ Rx sang Coroutine – Mức tiêu thụ bộ nhớ cũng dẫn đến các lệnh gọi GC thường xuyên và có số lượng luồng rất cao thông qua >100 luồng RX. Nhiều trường hợp sử dụng đã được chuyển sang Coroutine để khắc phục những vấn đề này.
Sử dụng Coil để tải hình ảnh – Glide gây ra vấn đề khi tải hình ảnh, cụ thể là trong các thành phần được tạo thông qua Jetpack Compose. Người dùng cũng nhận thấy rằng trong khi tải hình ảnh trong LazyColumn, thanh ngưỡng kết xuất có giá trị cao. Những trường hợp này dẫn đến việc sử dụng Coil để tải hình ảnh.
Dọn dẹp và tái cấu trúc mã cũ – Việc xoá mã cũ và các thử nghiệm đã giúp loại bỏ các khung hiển thị ẩn không cần thiết khỏi giao diện người dùng, đồng thời giúp viết lại một số màn hình theo cách hiệu quả hơn.
Kết quả
Bằng cách phân tích các điểm cần cải thiện và xác định chiến lược tối ưu hoá, ShareChat có thể cải thiện trải nghiệm tổng thể cho người dùng, đồng thời tăng tỷ lệ tương tác và điểm xếp hạng trên Cửa hàng Play. Dưới đây là thông tin tổng quan định lượng về kết quả mà ShareChat đạt được:
- Giảm khoảng 45% số khung hình "Kết xuất chậm" trên Cửa hàng Play
- Giảm khoảng 30% số khung hình "Bị treo" trên Cửa hàng Play
- Tỷ lệ khung hình bị giật cho mỗi 10.000 khung hình được kết xuất giảm từ 10,72% xuống 3,98%
- Số lượt di chuyển trong nguồn cấp dữ liệu tăng 60%
- Điểm xếp hạng tổng thể trên Cửa hàng đã tăng từ khoảng 4,0 lên 4,3
- Số lượt xem bài đăng tăng 10%
"Tại ShareChat, mục tiêu của chúng tôi là trở thành ứng dụng mạng xã hội tốt nhất, mang đến niềm vui cho người dùng.Điều này cũng có nghĩa là chúng tôi phải đạt hiệu suất tốt nhất về ứng dụng. Sự hợp tác của chúng tôi với nhóm quan hệ nhà phát triển của Google đã giúp chúng tôi xác định những điểm cần cải thiện trên các thiết bị người dùng cấp thấp được sử dụng nhiều nhất. Chúng tôi đã học được các phương pháp hay nhất về hiệu suất và các công cụ để xác định và khắc phục các khung hình bị treo, hiện tượng giật, tình trạng vẽ quá mức và lỗi ANR".
– Vihaan Verma, Quản lý kỹ thuật, Nhóm Android tại ShareChat