Đơn vị 8 / 11

Tối ưu hóa hiệu suất và pin: Ứng dụng nhanh và hiệu quả với trí tuệ nhân tạo

Lợi nhuận:

  • Trước tiên, bằng cách lấy hồ sơ và đo lường nút cổ chai thực sự, thực hiện tối ưu hóa dựa trên dữ liệu thay vì phỏng đoán và có kết quả hồ sơ được giải thích bằng trí tuệ nhân tạo
  • Khả năng nhắm mục tiêu hoạt động tốn kém nhất về thời gian khởi động, tính trôi chảy, bộ nhớ và pin và loại bỏ công việc nặng khỏi luồng chính
  • Khả năng quản lý chi phí pin và bộ xử lý của các khả năng AI như mô hình trên thiết bị và gọi điện trên đám mây thông qua lấy mẫu và xử lý hàng loạt

Người dùng di động thiếu kiên nhẫn. Nếu ứng dụng mở chậm, bị treo khi cuộn hoặc hao pin nhanh, người dùng sẽ xóa ứng dụng đó và xếp hạng sao cho ứng dụng đó trong cửa hàng. Hiệu suất và hiệu quả sử dụng pin là vấn đề sống còn của ứng dụng di động; Nó ảnh hưởng trực tiếp đến cả sự hài lòng của người dùng và thứ hạng của cửa hàng. AI là công cụ hỗ trợ đắc lực trong việc phát hiện các điểm nghẽn (thắt cổ chai) về hiệu suất, diễn giải kết quả đo lường và đề xuất các biện pháp tối ưu hóa. Nhưng nguyên tắc vàng vẫn là: đo lường trước, tối ưu hóa sau. Trong phần này, chúng ta sẽ học cách giải quyết các vấn đề về hiệu suất và pin theo cách dựa trên dữ liệu bằng AI. Một vấn đề đặc biệt quan trọng là quản lý tác động đến pin và hiệu suất của các khả năng AI mà chúng tôi đã thêm vào trong các đơn vị trước đó (kiểu máy trên thiết bị, gọi điện trên đám mây).

Tối ưu hóa mà không cần đo lường

Sai lầm lớn nhất của một nhà phát triển thiếu kinh nghiệm là tối ưu hóa dự đoán: lãng phí thời gian khi nói "cái này chắc chắn phải chậm". Nút thắt thực sự hầu như luôn ở một nơi không ngờ tới. Vì vậy, trước tiên, hồ sơ sẽ được thực hiện (lập hồ sơ - đo lường phần nào của ứng dụng tiêu thụ bao nhiêu thời gian/bộ nhớ/pin). Android Studio Profiler và Xcode Instruments dành cho công việc này. Cung cấp dữ liệu đo lường cho AI giúp tăng tốc độ giải thích; Nhưng nếu không đo lường, việc nói với AI "ứng dụng của tôi chậm, hãy tăng tốc lên" có nghĩa là đưa ra dự đoán một cách mù quáng.

Bốn trục chính của hiệu suất là:

trục

triệu chứng

nguyên nhân điển hình

Thời gian bắt đầu

Ứng dụng mở muộn

Công việc nặng nhọc trên chủ đề chính

Lưu loát (giật)

Cuộn bị kẹt

Xử lý lâu, vẽ lại không cần thiết trong chuỗi giao diện người dùng

ký ức

sưng tấy, sụp đổ

Rò rỉ, hình ảnh lớn, bộ nhớ đệm không được kiểm soát

pin/nhiệt

xuất tinh nhanh

Vị trí liên tục, mạng, cảm biến, công việc nền

Mẹo: Khi hỏi AI về vấn đề hiệu suất, hãy cung cấp đầu ra hồ sơ (chức năng nào mất bao lâu, biểu đồ bộ nhớ). Dữ liệu cứng như “Chức năng đó mất 30ms mỗi khung hình” cho phép AI tập trung vào nút cổ chai thực sự; Một cụm từ chủ quan như "chậm" sẽ tạo ra một câu trả lời chung chung và vô ích.

Chi phí pin của khả năng AI

Các tính năng AI mà chúng tôi thêm vào trong mô-đun này rất mạnh mẽ nhưng không miễn phí. Việc trích xuất mô hình trên thiết bị sẽ làm cạn kiệt bộ xử lý và pin; Tính năng nhận dạng hình ảnh chạy liên tục (ví dụ: camera xử lý từng khung hình) sẽ làm nóng điện thoại và tiêu hao pin trong vòng vài phút. Mặt khác, các cuộc gọi của Cloud AI sẽ ngốn pin bằng cách luôn bật radio mạng (ăng-ten gửi và nhận dữ liệu). Giải pháp: chỉ chạy mô hình trên thiết bị khi cần, lấy mẫu máy ảnh vài lần mỗi giây thay vì mỗi khung hình, gửi hàng loạt yêu cầu trên đám mây, thực hiện các công việc nặng trong khi thiết bị đang sạc hoặc không hoạt động.

Thận trọng: Tính năng AI chạy liên tục (dịch trực tiếp, nhận dạng đối tượng liên tục) có thể tiêu hao pin rất nhanh, làm nóng thiết bị và có thể bị hệ thống điều chỉnh. Một tính năng khiến người dùng cảm thấy chi phí này đã bị xóa. Tôi luôn hỏi AI "làm cách nào để làm cho tính năng này thân thiện với pin?" Cũng đặt câu hỏi.

Các bước tối ưu hóa

  1. Đo lường. Tìm nút thắt cổ chai thực sự với Profiler; đừng đoán.
  2. Chọn vấn đề lớn nhất. Đừng theo đuổi sự cải thiện 1%; Nhằm mục đích cho giao dịch đắt nhất.
  3. Hỏi AI bằng dữ liệu. Yêu cầu đề xuất tối ưu hóa với đầu ra hồ sơ + mã có liên quan.
  4. Áp dụng và đo lại. Sự cải thiện có thực sự không? Con số đã giảm?
  5. Kiểm soát hồi quy. Việc tối ưu hóa có phá vỡ điều gì không? Lặp lại kiểm tra trực quan và chức năng.

ba trường hợp nhỏ

Trường hợp 1 - Tìm kiếm sai chỗ. Một nhóm cho rằng danh sách đã bị kẹt và đã làm lại mã cuộn trong nhiều tuần mà không có kết quả. Khi họ lấy trình hồ sơ và cung cấp dữ liệu cho AI, hóa ra nút thắt thực sự là hình ảnh được tải lại qua mạng với mỗi hàng. Khi bộ đệm hình ảnh được thêm vào, độ mượt mà đã tăng từ 42 FPS lên 60 FPS. Bài học: việc đo lường giúp tránh được nhiều tuần nỗ lực vô ích.

Trường hợp 2 - Tính năng quái vật về pin. Ứng dụng dịch thuật đã thêm tính năng dịch văn bản trực tiếp bằng máy ảnh; Người dùng phàn nàn rằng "điện thoại nóng lên sau 15 phút và hết 30% pin". Khi tham khảo ý kiến ​​AI, camera được phát hiện đang xử lý 30 khung hình/giây; Khi điều này giảm xuống còn 5 khung hình và kết quả được cập nhật cách nhau vài khung hình, mức tiêu thụ pin giảm xuống còn 1/3 và chất lượng không đáng kể. Bài học: Luôn đặt AI bằng mắt pin.

Trường hợp 3 - Khởi phát chậm. Một ứng dụng sẽ mở sau 4,5 giây; 20% người dùng đã thoát khi khởi động. Hồ sơ cho thấy tất cả công việc ban đầu (phân tích, tải dữ liệu, chuẩn bị mô hình) được thực hiện tuần tự trên luồng chính. Với đề xuất của AI, những điều này đã bị hoãn lại và gác lại; Thời gian mở giảm xuống còn 1,3 giây và tỷ lệ bỏ qua giảm một nửa. Bài học: chỉ làm những công việc cần thiết ngay từ đầu.

Dấu nhắc yếu / Dấu nhắc mạnh

Lời nhắc yếu: "Ứng dụng của tôi chậm, hãy tăng tốc lên."

Lời nhắc mạnh mẽ: "Việc cuộn danh sách bị kẹt (giật) trong ứng dụng Android của tôi. Dữ liệu trình phân tích: bindImageView mất 28 mili giây trên mỗi khung hình, hình ảnh được tải từ mạng mỗi lần, không có bộ nhớ đệm. Mã liên quan: [Mã bộ điều hợp RecyclerView]. Đề xuất 3 cách tối ưu hóa hiệu quả nhất theo thứ tự tác động. Nêu rõ mức tăng dự kiến ​​và tác dụng phụ có thể xảy ra cho từng khung hình. Ưu tiên các giải pháp không làm giảm chất lượng hình ảnh."

Mẫu có thể sao chép

Mẫu phân tích nút thắt cổ chai: "Giải thích dữ liệu hồ sơ sau đây và tìm ra 3 hoạt động tốn kém nhất: [đầu ra của trình hồ sơ]. Đề xuất nguyên nhân có thể và tối ưu hóa cụ thể cho từng hoạt động. Tạo tác động cao nhất trước tiên."

Mẫu tối ưu hóa pin:"Tính năng này tiêu hao pin nhanh chóng: [tính năng, ví dụ: vị trí cố định]. Làm cho nó thân thiện với pin:- Giảm tần suất lấy mẫu- Hạn chế ở chế độ nền- Xử lý hàng loạt- Chỉ chạy khi cần thiết Sắp xếp giải pháp mà không làm gián đoạn trải nghiệm người dùng. [code]"

Mẫu tăng tốc khởi động: "Tăng tốc độ khởi động ứng dụng. Những việc hiện đang được thực hiện khi khởi động: [danh sách]. Cái nào có thể bị trì hoãn, chạy trong nền hoặc tải từng phần? Hãy tách những cái cần thiết. [mã]"

Mẫu chi phí tính năng AI: "Đánh giá hiệu suất và mức tiêu hao pin của tính năng [kiểu máy trên thiết bị/cuộc gọi trên đám mây] mà tôi đã thêm. Liệt kê các số liệu tôi nên đo lường và các chiến lược để giảm chi phí. [code]"

Những lỗi thường gặp

  • Tối ưu hóa mà không cần đo lường Nút thắt thực sự thường ở một vị trí khác với dự đoán.
  • Theo đuổi những lợi ích nhỏ. Hãy hướng tới hành động tốn kém nhất thay vì cải thiện 1%.
  • Bỏ qua chi phí pin của các tính năng AI. Model/máy ảnh/mạng chạy liên tục sẽ ngốn pin.
  • Làm mệt mỏi chủ đề chính. Việc khởi động và cuộn nặng nề không nên nằm trên chuỗi giao diện người dùng.
  • Không đo lại sau khi tối ưu hóa. Xác minh rằng cải tiến là có thật và không phá vỡ bất cứ điều gì.
  • Đo hiệu suất trong trình mô phỏng. Tốc độ, nhiệt độ và pin thực tế của thiết bị hoàn toàn khác nhau.

Tóm lại

Hiệu suất và pin là vấn đề sống còn của ứng dụng di động. Nguyên tắc vàng: đo lường trước, tối ưu hóa sau. Cung cấp dữ liệu hồ sơ cho AI sẽ tăng tốc độ giải thích; Ham muốn “tăng tốc” vô bờ bến dẫn đến những phỏng đoán mù quáng. Hãy nhắm đến giao dịch đắt tiền nhất, đừng theo đuổi những khoản lợi nhuận nhỏ. Các khả năng AI được thêm vào trong mô-đun này rất mạnh mẽ nhưng tốn kém chi phí về pin và bộ xử lý; Quản lý chi phí này bằng cách giảm tần suất lấy mẫu, phân đợt và chỉ chạy khi cần. Đo lại trên thiết bị thực sau mỗi lần tối ưu hóa.

Nhiệm vụ ứng dụng

Nhập hồ sơ vào một ứng dụng (dự án hoặc ví dụ của riêng bạn) hoặc tạo đầu ra hồ sơ mẫu và được AI diễn giải bằng "Mẫu phân tích nút cổ chai". Áp dụng mức tối ưu hóa tác động cao nhất và đo lường lại: con số có thực sự giảm không? Ngoài ra, hãy đánh giá tính năng AI mà bạn đã thêm trong mô-đun này (kiểu máy trên thiết bị hoặc cuộc gọi trên đám mây) về mặt pin bằng "Mẫu chi phí tính năng AI" và xác định ít nhất một cài đặt thân thiện với pin.

danh sách kiểm tra

  • [ ] Tôi đã nhận được hồ sơ trước khi tối ưu hóa, tôi không đoán được
  • [ ] Tôi nhắm đến giao dịch đắt nhất, tôi không phân tán vào những khoản lợi nhuận nhỏ
  • [ ] Tôi đã đưa ra dữ liệu hồ sơ AI bằng những con số cụ thể
  • [ ] Tôi đã đánh giá chi phí pin/bộ xử lý của các tính năng AI
  • [ ] Tôi đã loại bỏ phần nặng khỏi luồng chính
  • [ ] Sau khi tối ưu hóa, tôi đo lại trên thiết bị thật và kiểm tra hồi quy