Tối ưu hoá quyền truy cập mạng

Việc sử dụng đài không dây để chuyển dữ liệu có thể là một trong những nguồn làm tiêu hao pin quan trọng nhất của ứng dụng. Để giảm thiểu tình trạng tiêu hao pin liên quan đến hoạt động mạng, bạn phải hiểu rõ mức độ ảnh hưởng của mô hình kết nối đối với phần cứng đài cơ bản.

Phần này giới thiệu về máy trạng thái vô tuyến không dây và giải thích cách mô hình kết nối của ứng dụng tương tác với máy đó. Sau đó, API này sẽ đưa ra một số kỹ thuật mà khi làm theo, sẽ giúp giảm thiểu tác động của việc ứng dụng sử dụng dữ liệu.

Máy trạng thái radio

Đài phát không dây trên thiết bị của người dùng tích hợp sẵn các tính năng tiết kiệm pin giúp giảm thiểu mức tiêu thụ pin. Khi bật hoàn toàn, đài phát không dây sẽ tiêu thụ một lượng pin đáng kể, nhưng khi không hoạt động hoặc ở chế độ chờ, đài phát sẽ tiêu thụ rất ít pin.

Một yếu tố quan trọng cần nhớ là đài không thể chuyển từ chế độ chờ sang hoạt động hoàn toàn ngay lập tức. Có một khoảng thời gian trễ liên quan đến việc "bật nguồn" đài phát. Vì vậy, pin sẽ chuyển dần từ trạng thái năng lượng cao hơn sang trạng thái năng lượng thấp hơn để tiết kiệm điện khi không sử dụng, đồng thời cố gắng giảm thiểu độ trễ liên quan đến việc "bật nguồn" đài.

Máy trạng thái cho vô tuyến mạng 3G thông thường bao gồm ba trạng thái năng lượng:

  • Toàn bộ nguồn: Dùng khi kết nối đang hoạt động để cho phép thiết bị chuyển dữ liệu ở tốc độ cao nhất có thể.
  • Năng lượng thấp: Trạng thái trung gian giúp giảm mức tiêu thụ năng lượng pin khoảng 50%.
  • Chế độ chờ: Trạng thái tiêu thụ điện năng tối thiểu khi không có kết nối mạng nào hoạt động.

Mặc dù các trạng thái chờ và trạng thái thấp tiêu hao pin ít hơn đáng kể, nhưng các trạng thái này cũng gây ra độ trễ đáng kể cho các yêu cầu mạng. Thời gian trở lại trạng thái tối đa từ trạng thái thấp mất khoảng 1, 5 giây và chuyển từ chế độ chờ sang trạng thái có điện tối đa có thể mất hơn 2 giây.

Để giảm thiểu độ trễ, máy trạng thái sử dụng độ trễ để trì hoãn việc chuyển đổi sang trạng thái có mức năng lượng thấp hơn. Hình 1 sử dụng thời gian của AT&T cho một đài 3G thông thường.


Hình 1. Máy trạng thái vô tuyến không dây 3G thông thường.

Máy trạng thái vô tuyến trên mỗi thiết bị, đặc biệt là độ trễ chuyển đổi có liên quan ("thời gian đuôi") và độ trễ khởi động, sẽ thay đổi theo công nghệ vô tuyến không dây được triển khai (3G, LTE, 5G, v.v.) cũng như được xác định và định cấu hình bởi mạng của nhà mạng nơi thiết bị đang hoạt động.

Trang này mô tả máy trạng thái đại diện cho một đài phát thanh không dây 3G thông thường, dựa trên dữ liệu do AT&T cung cấp. Tuy nhiên, các nguyên tắc chung và phương pháp hay nhất để thu được kết quả này có thể áp dụng cho tất cả cách triển khai sóng vô tuyến không dây.

Phương pháp này đặc biệt hiệu quả đối với hoạt động duyệt web thông thường trên thiết bị di động vì nó ngăn chặn độ trễ không mong muốn khi người dùng duyệt web. Thời gian xem tương đối thấp cũng đảm bảo rằng sau khi phiên duyệt web kết thúc, đài phát có thể chuyển sang trạng thái năng lượng thấp hơn.

Thật không may, phương pháp này có thể dẫn đến các ứng dụng không hiệu quả trên các hệ điều hành hiện đại của điện thoại thông minh như Android, nơi các ứng dụng chạy cả ở nền trước (trong đó độ trễ là yếu tố quan trọng) và trong nền (nơi nên ưu tiên thời lượng pin).

Cách ứng dụng tác động đến máy trạng thái radio

Mỗi khi bạn tạo một kết nối mạng mới, đài phát sẽ chuyển sang trạng thái toàn bộ nguồn. Trong trường hợp máy ở trạng thái vô tuyến 3G thông thường được mô tả trước đó, máy vẫn sẽ hoạt động hết công suất trong suốt quá trình chuyển (cộng thêm 5 giây thời gian kết nối), sau đó là 12 giây ở trạng thái năng lượng thấp. Vì vậy, đối với một thiết bị 3G thông thường, mỗi phiên chuyển dữ liệu sẽ khiến đài phát lấy năng lượng trong ít nhất 18 giây.

Trên thực tế, điều này có nghĩa là một ứng dụng thực hiện quá trình chuyển dữ liệu trong một giây (3 lần/phút) sẽ duy trì trạng thái hoạt động vĩnh viễn cho đài phát thanh không dây và chuyển về mức công suất cao ngay khi đang chuyển sang chế độ chờ.


Hình 2. Mức sử dụng năng lượng vô tuyến không dây tương đối để chuyển dữ liệu trong 1 giây, chạy 3 lần mỗi phút. Hình này không bao gồm độ trễ "tăng sức mạnh" giữa các lần chạy.

So với, nếu cùng một ứng dụng đi kèm các lượt chuyển dữ liệu, chạy một lượt chuyển 3 giây mỗi phút, thì điều này sẽ giữ đài phát ở trạng thái công suất cao tổng cộng chỉ 20 giây mỗi phút. Điều này sẽ cho phép đài phát ở chế độ chờ trong 40 giây mỗi phút, giúp giảm đáng kể mức tiêu thụ pin.


Hình 3. Mức sử dụng năng lượng sóng vô tuyến tương đối không dây trong quá trình truyền 3 giây chạy một lần mỗi phút.

Kỹ thuật tối ưu hoá

Sau khi bạn đã hiểu quyền truy cập mạng ảnh hưởng như thế nào đến thời lượng pin, hãy bàn về một số việc bạn có thể làm để giảm mức tiêu hao pin, đồng thời mang lại trải nghiệm nhanh chóng và linh hoạt cho người dùng.

Chuyển dữ liệu theo gói

Như đã đề cập trong phần trước, một trong những cách tốt nhất để cải thiện hiệu suất pin là nhóm các hoạt động chuyển dữ liệu để bạn ít phải chuyển nhiều dữ liệu hơn.

Tất nhiên, điều này không phải lúc nào cũng thực hiện được nếu ứng dụng của bạn cần nhận hoặc gửi dữ liệu ngay lập tức để phản hồi một hành động của người dùng. Bạn có thể giảm thiểu điều này bằng cách dự đoán và tìm nạp trước dữ liệu. Các trường hợp khác, chẳng hạn như gửi nhật ký hoặc số liệu phân tích đến máy chủ và các hoạt động chuyển dữ liệu không khẩn cấp khác do ứng dụng khởi tạo, rất phù hợp để phân lô và nhóm. Hãy xem phần Tối ưu hoá các tác vụ do ứng dụng khởi tạo để biết các mẹo lên lịch chuyển mạng ở chế độ nền.

Tìm nạp trước dữ liệu

Tìm nạp trước dữ liệu là một cách hiệu quả khác để giảm số phiên chuyển dữ liệu độc lập mà ứng dụng của bạn chạy. Với tìm nạp trước, khi người dùng thực hiện một hành động trong ứng dụng, ứng dụng sẽ dự đoán dữ liệu nào có khả năng cần thiết nhất cho loạt hành động tiếp theo của người dùng và tìm nạp dữ liệu đó trong một gói duy nhất, qua một kết nối duy nhất, ở mức tối đa.

Bằng cách tải trước các quá trình chuyển, bạn sẽ giảm được số lần kích hoạt radio cần thiết để tải dữ liệu xuống. Nhờ đó, bạn không chỉ tiết kiệm pin mà còn cải thiện độ trễ, giảm băng thông bắt buộc và giảm thời gian tải xuống.

Quá trình tìm nạp trước cũng giúp cải thiện trải nghiệm người dùng bằng cách giảm thiểu độ trễ trong ứng dụng do phải chờ quá trình tải xuống hoàn tất rồi mới thực hiện một hành động hoặc xem dữ liệu.

Sau đây là một ví dụ thực tế.

Người đọc tin tức

Nhiều ứng dụng tin tức cố gắng giảm băng thông bằng cách chỉ tải các tiêu đề xuống sau khi chọn một danh mục, chỉ tải bài viết đầy đủ khi người dùng muốn đọc chúng, và hình thu nhỏ ngay khi người dùng cuộn vào khung hiển thị.

Khi sử dụng phương pháp này, đài phát thanh buộc phải duy trì trạng thái hoạt động trong phần lớn phiên đọc tin tức của người dùng khi họ cuộn tiêu đề, thay đổi danh mục và đọc bài viết. Không chỉ vậy, việc liên tục chuyển đổi giữa các trạng thái năng lượng dẫn đến độ trễ đáng kể khi chuyển đổi danh mục hoặc đọc bài viết.

Một phương pháp hiệu quả hơn là tìm nạp trước lượng dữ liệu hợp lý khi khởi động, bắt đầu với nhóm tiêu đề và hình thu nhỏ tin tức đầu tiên (đảm bảo thời gian khởi động có độ trễ thấp), đồng thời tiếp tục với các tiêu đề và hình thu nhỏ còn lại, cũng như văn bản bài viết cho mỗi bài viết có trong ít nhất là danh sách tiêu đề chính.

Một cách khác là tìm nạp trước mọi tiêu đề, hình thu nhỏ, văn bản bài viết và thậm chí có thể là toàn bộ hình ảnh bài viết – thường là ở chế độ nền theo một lịch biểu xác định trước. Phương pháp này có nguy cơ gây tốn đáng kể băng thông và thời lượng pin khi tải nội dung không bao giờ được sử dụng xuống. Vì vậy, bạn cần thận trọng khi triển khai phương pháp này.

Các yếu tố cần cân nhắc khác

Mặc dù việc tìm nạp trước dữ liệu mang lại rất nhiều lợi ích, nhưng việc sử dụng quá nhiều lần tìm nạp trước cũng dẫn đến nguy cơ làm tăng hiện tượng tiêu hao pin và mức sử dụng băng thông (cũng như hạn mức tải xuống) do tải dữ liệu không được sử dụng xuống. Một điều quan trọng nữa là bạn phải đảm bảo quá trình tìm nạp trước không trì hoãn quá trình khởi động ứng dụng trong khi ứng dụng đợi quá trình tìm nạp trước hoàn tất. Trong thực tế, những hoạt động này có thể là việc xử lý dữ liệu dần dần hoặc bắt đầu các lượt chuyển liên tiếp được ưu tiên, sao cho dữ liệu cần thiết để khởi động ứng dụng sẽ được tải xuống và xử lý trước.

Mức độ tích cực tìm nạp trước dữ liệu phụ thuộc vào kích thước của dữ liệu được tải xuống và khả năng dữ liệu đó được sử dụng. Như một hướng dẫn sơ bộ, dựa trên máy trạng thái được mô tả trước đó, đối với dữ liệu có 50% cơ hội được sử dụng trong phiên người dùng hiện tại, bạn thường có thể tìm nạp trước trong khoảng 6 giây (khoảng 1-2 megabyte) trước khi chi phí tiềm năng để tải dữ liệu không sử dụng xuống khớp với số tiền có thể tiết kiệm được khi không tải dữ liệu đó xuống để bắt đầu.

Nói chung, bạn nên tìm nạp trước dữ liệu sao cho chỉ cần bắt đầu một lượt tải xuống khác từ 2 đến 5 phút một lần và theo thứ tự từ 1 đến 5 megabyte.

Theo nguyên tắc này, các tệp tải xuống có kích thước lớn (chẳng hạn như tệp video) sẽ được tải xuống theo từng phần theo khoảng thời gian đều đặn (2 đến 5 phút một lần), chỉ tìm nạp trước hiệu quả những dữ liệu video có thể sẽ xem trong vài phút tiếp theo.

Một giải pháp là lên lịch tải toàn bộ xuống chỉ khi kết nối với Wi-Fi và có thể chỉ khi thiết bị đang sạc. WorkManager API hỗ trợ chính xác trường hợp sử dụng này, cho phép bạn hạn chế công việc ở chế độ nền cho đến khi thiết bị đáp ứng các tiêu chí do nhà phát triển chỉ định, chẳng hạn như sạc và kết nối Wi-Fi.

Kiểm tra khả năng kết nối trước khi yêu cầu

Tìm kiếm tín hiệu di động là một trong những thao tác tiêu hao pin nhất trên thiết bị di động. Phương pháp hay nhất đối với các yêu cầu do người dùng đưa ra là kiểm tra kết nối trước bằng cách sử dụng ConnectivityManager, như minh hoạ trong phần Theo dõi trạng thái kết nối và định mức kết nối. Nếu không có mạng, ứng dụng có thể tiết kiệm pin bằng cách không buộc đài di động tìm kiếm. Sau đó, yêu cầu có thể được lên lịch và thực hiện theo lô cùng với các yêu cầu khác khi kết nối được thực hiện.

Kết nối với bể bơi

Một chiến lược bổ sung có thể hữu ích ngoài việc phân lô và tìm nạp trước, là gộp các kết nối mạng của ứng dụng.

Việc sử dụng lại kết nối mạng hiện có thường sẽ hiệu quả hơn so với bắt đầu kết nối mạng mới. Việc sử dụng lại các kết nối cũng giúp mạng phản ứng hiệu quả hơn với tình trạng tắc nghẽn và các vấn đề liên quan đến dữ liệu mạng.

HttpURLConnection và hầu hết các ứng dụng HTTP (chẳng hạn như OkHttp) sẽ bật tính năng gộp kết nối theo mặc định và sử dụng lại cùng một kết nối cho nhiều yêu cầu.

Tổng kết và hướng đến tương lai

Trong phần này, bạn đã tìm hiểu nhiều về đài không dây và một số chiến lược có thể áp dụng rộng rãi để cung cấp trải nghiệm người dùng nhanh nhạy, đồng thời giảm hiện tượng tiêu hao pin.

Trong phần tiếp theo, chúng ta sẽ xem xét chi tiết 3 loại tương tác mạng riêng biệt mà hầu hết ứng dụng thường gặp. Bạn sẽ tìm hiểu các yếu tố thúc đẩy cho từng loại này cũng như các kỹ thuật và API hiện đại để quản lý hiệu quả các lượt tương tác này.