SỬ DỤNG TIME PROFILER TRONG XCODE INSTRUMENTS ĐỂ CẢI THIỆN HIỆU NĂNG ỨNG DỤNG

24/06/2020 469
CODEWELL

Xcode Instruments là bộ công cụ đi kèm cùng Xcode. Nó gồm nhiều công cụ hỗ trợ quan sát và cải thiện ứng dụng của bạn.

Trong bài này, chúng ta sẽ thực hiện các bước giúp cải thiện hiệu năng của chức năng Importing photos trong ứng dụng Collect bằng Xcode Instruments, cụ thể là sử dụng công cụ “Time Profiler”.

Bạn có thể xem một ví dụ về kết quả trước và sau khi cải thiện hiệu năng tại link sau: https://bit.ly/33jl6BH

Như đã thấy, popup “importing photos” trong bản cũ xuất hiện lâu hơn so với bản đã cải thiện. Hãy cùng đi vào chi tiết để phân tích rõ hơn.

  1. XCODE INSTRUMENTS là gì?

Xcode Instruments là công cụ hỗ trợ phân tích hiệu năng và testing tốt nhất hiện nay. Với Instruments chúng ta có thể:

  • Theo dõi các vấn đề trong source code
  • Phân tích hiệu năng của ứng dụng
  • Tìm các vấn đề về bộ nhớ

và nhiều hơn nữa.

Mở Xcode Instruments như thế nào?

Chúng ta có thể mở Instruments từ Xcode bằng cách vào Product ➔ Profile hoặc sử dụng phím tắt ⌘ + I. Màn hình Instruments hiển thị như bên dưới.

Trong Instruments có rất nhiều chức năng, mỗi chức năng phục vụ các mục đích phân tích cho các ứng dụng khác nhau

2. Sử dụng Time Profiler trong Instrument để điều tra và cải thiện hiệu năng

Với công cụ Time Profiler chúng ta có thể thấy được ứng dụng đang sử dụng CPU có hiệu quả hay không.

Hiệu năng của các ứng dụng Collect được đo bằng thời gian tải và thêm nội dung vào ứng dụng. Chúng ta sẽ sử dụng Time Profiler để phân tích và tối ưu hoá ứng dụng.

Giao diện thường bị treo, giật khi có quá nhiều tác vụ được thực hiện trong luồng chính và đó chính là vấn đề ảnh hưởng lớn đến trải nghiệm trong các ứng dụng Collect.

Hình trên cho chúng ta cái nhìn tổng quan về các luồng đang được ứng dụng sử dụng. Chúng ta có thể thấy luồng chính được sử dụng khá nặng trong khi các luồng khác sử dụng ít.

Giờ chúng ta cùng phân tích chi tiết luồng chính.

Có thể thấy rõ ràng PHImageManager có hiệu năng không tốt, chiếm đến 3,36 giây trong tổng 11,16 giây. Do đó để giảm tải cho luồng chính chúng ta có thể chuyển nó xuống chạy dưới background.

Ngoài ra, chúng ta cũng nên chú ý đến BucketHeaderView, luôn được tính lại chiều cao mặc dù chúng ta không thực hiện bất kỳ tác vụ gì liên quan. Việc này là không cần thiết.

Sau khi thực hiện tối ưu hoá chúng ta có thể thấy kết quả như sau:

Như hình trên có thể thấy PHImageManager không còn là tác vụ nặng nhất, điều này có nghĩa là code được thay đổi đã hoạt động có hiệu quả.

BucketHeaderView cũng không phải tính lại nhiều và hiệu năng được cải thiện.

3.  Tổng kết

Chúng ta dùng công cụ Time Profiler để kiểm tra các luồng đang được sử dụng trong ứng dụng như thế nào qua đó xác định liệu luồng chính có thực hiện các tác vụ quá nặng ảnh hưởng đến hiệu năng ứng dụng hay không. Nếu phát hiện bất thường trong luồng chính chúng ta cần xác định các tác vụ cụ thể để đưa ra phương pháp tương ứng nhằm tối ưu. Đó có thể là:

  1. Chuyển tác vụ từ luồng chính xuống background thực hiện
  2. Sử dụng thêm bộ nhớ đệm (cache) thường sử dụng đối với dữ liệu là ảnh
  3. Thay đổi code hoặc thư viện khác hiệu quả hơn
  4. Bỏ đoạn code không thực sự cần thiết

  Lê Văn Cường – CO-WELL Asia