說到APP優化,咱們也能夠從不少方面進行優化,從包大小、頁面流暢度、內存佔用、數據緩存、網絡數據安全等等來優化加固咱們的APP,每個點展開又有不少須要將的,我之前也專門寫了一篇關於APP性能優化的博文,以下:redis
👉《iOS-性能優化的那些事》api
在移動端APP網絡優化也是APP性能優化的一個很是重要的一個點,並且99.99%的APP都會伴隨着網絡交互; 在此,我將對APP網絡優化和網絡安全作一個詳細的總結,主要從流量、質量、安全方面去說,如要結構點以下: 緩存
先說一個親身經歷過得事情,之前在一家公司開發了一款APP,有一點客服反饋有個上海老大爺打電話過來罵人,手機裝了咱們的APP,一個晚上用掉人家一兩個G;後來公司也主動幫人家承擔了這部分的流量資費,關鍵是15年流量資費還很高的,這個APP固然不是我寫的,是安卓的小夥伴! 安全
即便流量如今價格不是很貴了,可是儘量的幫用戶節省流浪也是很是應該的!相信你們在開發APP的時候確定會作一些埋點和日誌上報的功能,咱們也能夠把網絡請求的監控也作進去,咱們能夠檢測用戶在一段時間內的流量消耗,計算流量的均值和峯值等等,並上報流量接口,這些咱們在日誌或者埋點系統裏面均可以記錄,而後上傳給服務端,而後進行數據分析,找出流量消耗的不足之處。性能優化
說到緩存,這也是一個很是大的一個點,有時間也能夠展開說,我平時的博客關於緩存也講到不少,緩存的一個很是重要的好處就是提好了頁面加載速度,提升用戶的使用體驗;可是緩存也能夠替用戶節省流量的消耗。 APP數據的緩存無非是列表接口的緩存、WebView的緩存,關於WebView的緩存我也單獨寫過,以下:服務器
咱們還能夠作資源包下發預製加載等,這裏也不展開了! 性能
關於數據壓縮,這邊主要想講的就是資源文件的數據壓縮了,主要在網絡上傳和網絡下載方面;學習
1.數據上傳 好比上傳圖片數據的時候是否是須要原圖高清圖,如今相機的像素都高,咱們是否是能夠搞了壓縮一下圖片或者視頻再上傳,就像微信發送圖片的時候,用戶能夠選擇壓縮或者原圖;
2.數據下載 下載目前也是APP的大頭了,通常APP都是請求下載的數據比較多;咱們在加載資源的時候能夠選擇加載壓縮資源,好比微信的朋友圈,小圖的時候咱們能夠加載縮略圖,要是點擊查看大圖的時候才考慮加載大圖原圖;
數據交互若是比較頻繁會消耗用戶的流量,並且用戶體驗很差,還有一個很是重要的緣由就是頻繁的網絡請求也會比較損耗手機的電量;因此咱們能夠合併一些能合併的網絡請求,好比日誌上報的時候。
在APP開發的過程當中,通常就是一進入頁面就進行網絡請求,而後等待結束加載數據,可是好比網絡請求比較緩慢(多是數據量比較大,也有多是網絡情況很差),用戶不想等了,直接返回頁面銷燬了,可是咱們的大部分網絡請求是單獨封裝的,可是網絡請求還在繼續請求中,這裏數據、性能、內存、電量的問題就出來了,因此你們在封裝網絡請求的時候要把頁面銷燬就取消網絡請求的場景考慮進去!
網絡請求的速度是影響用戶體驗的一個很是重要的緣由,因此服務端也要想着來提升api的交互速度,爲此咱們能夠經過下面的幾個方案來優化交互速度,以下:
a.域名合併,減小了DNS調用次數,下降了DNS劫持風險;
b.ip直連,去除DNS的解析步驟;
c.api緩存,好比redis緩存;
d.數據資源壓縮上傳;
監控網絡請求質量和請求速度,而後記錄日誌進行上報,監控完整的網絡請求鏈路;
api的設計也要考慮到api的壓力以及服務器的壓力,防止由於壓力太大致使接口掛掉,從而影響用戶的體驗;
服務端在給APP端提供數據的時候,避免讓APP端進行數據處理或者運算,比較APP的內存資源和運算資源有限,不要過分消耗浪費APP資源; 好比,我上家公司的用戶信息裏面有用戶的年齡,可是服務端給的不是直接的年齡數據,而是給的生日時間戳,須要APP端本身去計算年齡,可是咱們知道 NSDateFormatter又是重大內存開銷對象,在列表處理的時候又比較消耗內存,因此建議關於運算的一些東西最好在服務端計算好,這種不只僅保證APP的性能問題,仍是一種安全問題!
咱們在APP端的網絡安全問題通常是APP抓包、DNS劫持、服務器安全,詳細以下:
說到抓包,侵入者能夠選擇抓取數據來竊密APP的關鍵數據,而後模擬請求,作一些APP很差控制的事情,在此咱們可使用Https進行網絡請求,還能夠禁止網絡請求設置代碼; 還能夠把請求頭和請求體進行加密傳輸,多一次保證! 可是須要說明一點的是,沒用絕對的安全,只要是人設計的加密就有人設計解密,窺視內心在做怪!
DNS劫持,因爲域名解析爲IP這個過程當中,其解析是基於UDP 協議實現,因此報文是明文狀態,可能會在請求過程當中被監測,而後攻擊者作一些本身的處理,好比返回假的IP地址或者什麼都不作使請求失去響應,其效果就是對特定的網絡不能反應或訪問的是假網址。根本緣由就是如下兩點:
a.惡意攻擊,攔截運營商的解析過程,把本身的非法東西嵌入其中。
b.運營商爲了利益或者一些其餘的因素,容許一些第三方在本身的連接裏打打廣告之類的。
如何防止DNS劫持? 能夠經過上面我說的IP直連,本身在APP解析! 推薦一篇寫的比較詳細的關於DNS的,以下:
服務器安全能夠從物理安全和網絡安全來講 a.物理安全,服務器要考慮好比斷電、斷網等狀況下致使的安全問題; b.網絡安全,防止服務器被攻擊、被爬蟲等問題; 因此,服務器的備份機制和數據備份機制和重要,還要限制同一IP的請求次數和間隔等;
若有不足之處還望各位大佬不吝賜教,也歡迎你們加羣或者叫我QQ討論交流學習!