性能優化5--網路優化

来源:https://www.cnblogs.com/ganchuanpu/archive/2018/07/07/9277975.html
-Advertisement-
Play Games

一. 網路監控 1 Network MonitorAndroid Studio自帶的Network Monitor簡單直觀,可以看出時間段之內的網路請求數量及訪問速率; 2 Charles、Fiddler等抓包工具使用Charles、Fiddler等抓包工具同樣可以實現Network Monitor ...


一. 網路監控

1 Network Monitor
Android Studio自帶的Network Monitor簡單直觀,可以看出時間段之內的網路請求數量及訪問速率;

2 Charles、Fiddler等抓包工具
使用Charles、Fiddler等抓包工具同樣可以實現Network Monitor的功能,而且更加強大。

3 Stetho
Stetho是Facebook出品的一個Android應用的調試工具。無需Root即可通過Chrome,在Chrome Developer Tools中可視化查看應用佈局,網路請求,sqlite,preference等。同樣集成了Stetho之後也可以很方便的查看網路請求的各種情況。

二 網路優化
網路優化主要從三個方面進行:1. 速度;2. 成功率;3. 流量。

1 Gzip壓縮
HTTP協議上的Gzip編碼是一種用來改進WEB應用程式性能的技術,用來減少傳輸數據量大小,減少傳輸數據量大小有兩個明顯的好處:
可以減少流量消耗;
可以減少傳輸的時間。

2 IP直連與HttpDns;
DNS解析的失敗率占聯網失敗中很大一種,而且首次功能變數名稱解析一般需要幾百毫秒。針對此,我們可以不用功能變數名稱,才用IP直連省去 DNS 解析過程,節省這部分時間。
另外熟悉阿裡雲的小伙伴肯定知道HttpDns:HttpDNS基於Http協議的功能變數名稱解析,替代了基於DNS協議向運營商Local DNS發起解析請求的傳統方式,可以避免Local DNS造成的功能變數名稱劫持和跨網訪問問題,解決功能變數名稱解析異常帶來的困擾。   3 圖片處理
3.1 圖片下載
使用WebP格式;同樣的照片,採用WebP格式可大幅節省流量,相對於JPG格式的圖片,流量能節省將近 25% 到 35 %;相對於 PNG 格式的圖片,流量可以節省將近80%。最重要的是使用WebP之後圖片質量也沒有改變。
使用縮略圖;App中需要載入的圖片按需載入,列表中的圖片根據需要的尺寸載入合適的縮略圖即可,只有用戶查看大圖的時候才去載入原圖。不僅節省流量,同時也能節省記憶體!之前使用某公司的圖片存儲服務在原圖鏈接之後拼接寬高參數,根據參數的不同返回相應的圖片。
3.2 圖片上傳
圖片(文件)的上傳失敗率比較高,不僅僅因為大文件,同時帶寬、時延、穩定性等因素在此場景下的影響也更加明顯;
避免整文件傳輸,採用分片傳輸;
根據網路類型以及傳輸過程中的變化動態的修改分片大小;
每個分片失敗重傳的機會。
備註:圖片上傳是一項看似簡單、共性很多但實際上複雜、需要細分的工作。移動互聯網的場景和有線的場景是有很多區別的,例如移動網路的質量/帶寬經常會發生“跳變”,但有線網路卻是“漸變”。   4 協議層的優化
使用最新的協議,Http協議有多個版本:0.9、1.0、1.1、2等。新版本的協議經過再次的優化,例如:
Http1.1版本引入了“持久連接”,多個請求被覆用,無需重建TCP連接,而TCP連接在移動互聯網的場景下成本很高,節省了時間與資源;
Http2引入了“多工”、頭信息壓縮、伺服器推送等特性。
新的版本不僅可以節省資源,同樣可以減少流量;我對Http2並沒有實際接入經驗,此處僅從原理進行分析。   5 請求打包
合併網路請求,減少請求次數。對於一些介面類如統計,無需實時上報,將統計信息保存在本地,然後根據策略統一上傳。這樣頭信息僅需上傳一次,減少了流量也節省了資源。   6 網路緩存
對服務端返回數據進行緩存,設定有效時間,有效時間之內不走網路請求,減少流量消耗。對網路的緩存可以參見HttpResponseCache。
備註:我們也可以自定義緩存的實現,一些網路庫例如:Volley、Okhttp等都有好的實踐供參考。   7 網路狀態
根據網路狀態對網路請求進行區別對待,2G與Wifi狀態下網路質量肯定是不一樣的,那對應的網路策略也應該是不一樣的。例如:在Wifi場景下可以進行數據的預取、一些統計的集中上傳等;而在2G場景下此類操作以及網路請求的次數策略都應該調低。網路狀態可以由TelephonyManager.getNetworkType()方法獲取到。
備註:還可以使用Facebook的開源庫network-connection-class來做網路狀態的判斷。   8 其它
斷點續傳,文件、圖片等的下載,採用斷點續傳,不浪費用戶之前消耗過的流量;
重試策略,一次網路請求的失敗,需要多次的重試來斷定最終的失敗,可以參考Volley的重試機制實現。
Protocol Buffer
Protocol Buffer是Google的一種數據交換的格式,它獨立於語言,獨立於平臺。相較於目前常用的Json,數據量更小,意味著傳輸速度也更快。
具體的對比可以參見:《Protobuffer和json深度對比》。
儘量避免客戶端的輪詢,而使用伺服器推送的方式;
數據更新採用增量,而不是全量,僅將變化的數據返回,客戶端進行合併,減少流量消耗;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 Flume 是 Cloudera 提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的軟體。 Flume 的核心是把數據從數據源(source)收集過來,再將收集到的數據送到指定的目的地(sink)。為了保證輸送的過程一定成功,在送到目的地(sink)之前,會先緩存數據(chann ...
  • 概述 序列化(Serialization)是指把結構化對象轉化為位元組流。 反序列化(Deserialization)是序列化的逆過程。把位元組流轉為結構化對象。 當要在進程間傳遞對象或持久化對象的時候,就需要序列化對象成位元組流,反之當要將接收到或從磁碟讀取的位元組流轉換為對象,就要進行反序列化。 Jav ...
  • 篇幅簡介 篇幅簡介 一、Msql數據類型 1、整型 tinyint, 占 1位元組 ,有符號: -128~127,無符號位 :0~255 smallint, 占 2位元組 ,有符號: -32768~32767無符號位 :0~65535 mediumint 占 3位元組 ,有符號: -8388608~838 ...
  • MapReduce 的輸入輸出 MapReduce 框架運轉在<key,value> 鍵值對上,也就是說,框架把作業的輸入看成是一組<key,value>鍵值對,同樣也產生一組<key,value>鍵值對作為作業的輸出,這兩組鍵值對可能是不同的。 一個 MapReduce 作業的輸入和輸出類型如下圖 ...
  • (一)問題: 最近在做Oracle數據清理,在對分區表進行數據清理時,採用的方法是drop partition,刪除的過程中,沒有遇到任何問題,大概過了10分鐘,開發人員反饋部分分區表上的業務失敗。具體錯誤為: ORA-01502錯誤:索引或這類索引的分區處於不可用狀態(英文:ora-01502:i... ...
  • 大數據時代,你在乾什麼?大家都知道數據本身並沒有什麼價值,由於分析方法的存在,使得海量的數據變得如同一座永遠開采不完的礦,是金礦還是銀礦,得看你怎麼分析和怎麼利用了,和小編一起來瞭解一下怎麼學習大數據吧。 大數據時代,你在乾什麼?大家都知道數據本身並沒有什麼價值,由於分析方法的存在,使得海量的數據變 ...
  • 設備環境:Electra、iOS11.13.1 PS:Electra最新版本進行越獄只支持11.14以下的版本、同時這是不完美越獄,每次重啟手機都需要重新越獄,最後,由於Electra版本推出倉促,一次成功率較低。僅建議喜歡瞎折騰的童鞋嘗試。 越獄結果截圖 越獄過程 進入 "Electra" 官網下 ...
  • 1、 電量測試Android4.1版本之後在系統增加了battery info模塊,記錄一定時間周期內整機及單個App的電量消耗。2.1 註冊廣播ACTION_BATTERY_CHANGED 然後就可以獲取電池電量、充電狀態、電池狀態等信息。具體參考BatteryManager。缺點:①獲取到的是手 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...