Tối ưu hóa truy cập mạng bằng mã code

Một phần của tài liệu Nhom15_Network-and-Real-User (Trang 31 - 36)

Quá trình xây dựng và phát triển ứng dụng sẽ được áp dụng nhiều các kỹ thuật, công nghệ khác nhau để tạo ra ứng dụng của bạn. Có nhiều phương pháp để tối ưu hóa mã code cũng như các kỹ thuật tối ưu hiệu suất mạng trong ứng dụng của bạn sau khi phát triển và sử dụng:

a)Sử dụng CDNs

CDNs – viết tắt của Content Delivery Networking được hiểu là mạng phân phối nội dung.

Hình 2.16.Sử dụng CDNs

Mạng phân phối nội dung CDN có kết cấu hệ thống đơn giản, gồm 1 server gốc, chính là trung tâm cho toàn bộ hệ thống website hoặc ứng dụng, và các máy

đưa người dùng dễ tiếp cận tới thông tin hơn, rút ngắn thời gian load, tải dữ liệu, giảm độ trễ thời gian truyền dữ liệu để hiển thị lên website, ứng dụng.

Hình 2.17.Phân phối CDSs và cahing

Bạn có thể mua và kích hoạt dịch vụ CDN từ các nhà cung cấp dịch vụ uy tín như: Amazon, MaxCDN, CDN 77, Akamai CDN, …

b)Kiến trúc Nhận biết mạng linh hoạt (Flexibly Network Aware – FNA)

Không phải ở mọi vị trí, mọi nơi đều có kết nối mạng lý tưởng (điều kiện kết nối mạng tốt) vì dựa trên số liệu khảo sát, có rất nhiều vùng, khu vực vẫn đang còn sử dụng các nền mạng 2G, 3G và có những nơi được cung cấp mạng 4G, Wi-Fi. Do đó việc nhận biết người dùng ứng dụng kết nối mạng với điều kiện ít lý tưởng hơn và vận dụng những thủ thuật để nâng cao trải nghiệm người dùng trên các nền điều kiện mạng đó là điều cần thiết trong quá trình phát triển ứng dụng của bạn. Ở đây ta dùng kiến trúc Nhận biết mạng linh hoạt – FNA vào việc phát triển ứng dụng bằng một số đoạn code dưới đây:

Truy vấn tới Trình quản lý điện thoại – Telephony Manager để nhận biết “netType”:

TelephonyManager teleMan =

(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); int networkType = teleMan.getNetworkType();

switch (networkType) { case 1: netType = "GPRS"; networkSpeed = "slow"; break; case 2: netType = "EDGE";

case 3:

netType = "UMTS";

networkSpeed = "medium"; break;

// we'll leave out a few network types, but you get the idea. case 13:

netType = "LTE"; networkSpeed = "fast"; break;

}

Bằng cách truy vấn trạng thái mạng định kỳ, FNA sẽ cải thiện hoặc hạn chế chất lượng tải dữ liệu trên ứng dụng của bạn. Hoặc bạn có thể làm nâng cao hơn khi phân tích đến tín hiệu mạng 3G hoặc 4G hoặc Wi-Fi của người dùng “mạnh”, “yếu” hay là “trung bình”. Cụ thể ở đây, với đã thiết lập được kiểu mạng, độ mạnh yếu của tín hiệu mạng, ta dùng để tải quyết định tải xuống và hiển thị dữ liệu hình ảnh lên ứng dụng:

switch (networkSpeed) { case "fast":

new ImageDownloader().execute(urlbig); //image is 143KB break;

case "medium":

new ImageDownloader().execute(urlmed); //image is 41KB break;

case "slow":

new ImageDownloader().execute(urlsmall); //image is 27KB break;

}

Nâng cao hơn nữa, ta có thể tính toán thông lượng thực của tệp dữ liệu theo Kb/s trên ứng dụng bằng việc ghi lại khoảng thời gian “t” bằng cách đo quãng thời gian nhận và gửi requests/responses và ước tính độ trễ của mạng. Qua đó đưa ra các thuật toán hợp lý cho dữ liệu gửi đi từ phía server:

private Bitmap downloadBitmap(String url) { //download start time

Long start = System.currentTimeMillis();

final DefaultHttpClient client = new DefaultHttpClient(); final HttpGet getRequest = new HttpGet(url);

HttpResponse response = client.execute(getRequest); //check 200 OK for success

final int statusCode = response.getStatusLine().getStatusCode(); //time 200 response received

Long gotresponse = System.currentTimeMillis(); }

final HttpEntity entity = response.getEntity(); //get ContentLength of file

contentlength = entity.getContentLength(); if (entity != null) {

InputStream inputStream = null; try {

inputStream = entity.getContent();

final Bitmap bitmap = BitmapFactory.decodeStream(inputStream); Long gotimage = System.currentTimeMillis();

//time image download completed responsetime = gotresponse - start; //time to the 200 ok response imagetime = gotimage-start; //download time ~~ KB/s throughput = ((double)contentlength/1024)/((double)imagetime/1000); return bitmap; } } }

đáng kể do gặp phải tệp với kích thước lớn. Và khi áp dụng kiến trúc FNA, tải xuống dữ liệu ở mạng UMTS nhanh hơn ~ 100%, và ở mạng EDGE là nhanh hơn ~ 300%. Với mô hình đơn giản này, ta có thể thấy tiềm năng cải thiện tương tác của người dùng với ứng dụng.

Việc thu thập CSDL về độ trễ và thông lượng trên hệ thống tạo mạng và cường độ tín hiệu có thể cho phép bạn xây dụng một thuật toán tốt hơn cho phép ứng dụng của bạn linh hoạt với kết nối mạng hơn và thực tế hơn, qua đó đem lại lợi ích tốt về việc trải nghiệm người dùng.

c) Tính toán độ trễ mạng và tìm nạp

Với sự phát hiện môi trường mạng có độ trễ cao khi ứng dụng kiến trúc FNA, ta có thể phát triển để tăng tốc độ trài nghiệm người dùng bằng cách tìm nạp trước nội dung của ứng dụng.

Ví dụ: Ứng dụng hiển thị ảnh bạn trong môi trường độ trễ tương đối cao, bạn có thể lập trình để ứng dụng bắt đầu tài xuống dữ liệu bổ sung, của trang tiếp theo trước khi người dùng truy cập đến cuối danh sách nội dung hiện tại.

if (latency = normal) {

if (ImagesBelowtheFold<2) { <get next batch of images> }

} else {

//latency is high

if (ImagesBelowtheFold<4) { <get next batch of images>

//consider getting more images too //also, smaller images?

} }

Bằng cách bắt đầu tải xuống sớm hơn “x” lần, bạn cung cấp cho mạng gấp “x” lần thời gian để tải dữ liệu xuống trước khi người dùng nhận thấy độ trễ do mạng chậm. Điều này có thể sử dụng nhiều dữ liệu mạng hơn và có khả năng tải thừa dữ

liệu, vì thế phương pháp này cần được áp dụng một cách thận trọng trong ứng dụng của bạn.

Một phần của tài liệu Nhom15_Network-and-Real-User (Trang 31 - 36)

Tải bản đầy đủ (PDF)

(55 trang)