網(wǎng)絡請求緩存之無網(wǎng)絡

在移動端壕翩,沒有網(wǎng)絡或者網(wǎng)絡狀態(tài)極差的情況下是一件比較惱人的事情澜汤。為了使用戶擁有較好的用戶體驗稠诲,網(wǎng)絡緩存是每個成功app必備的功能之一,其實網(wǎng)絡請求緩存很簡單飒炎,但還是寫一篇文章記錄下埋哟。

不僅在無網(wǎng)絡時可以使用網(wǎng)絡請求緩存,在有網(wǎng)絡時也可以使用網(wǎng)絡請求來提高響應速率郎汪,提高用戶體驗赤赊。

什么樣的請求可以被緩存?

在網(wǎng)絡請求中煞赢,最常用的就是POST和GET,下面只討論這兩種請求抛计。POST請求不可以被緩存,而get請求可以被緩存照筑,GET請求會將請求的參數(shù)構造在url中以?符開始吹截,&符連接不同參數(shù)。
例如:

https://www.baidu.com/s?wd=123

上如url中" 凝危?"前是get請求的url , ?后是get請求的攜帶的參數(shù)波俄,鍵在"="前,值在"="后蛾默。

無網(wǎng)絡時從緩存中獲得GET請求響應

從GET請求的實現(xiàn)方式上來給懦铺,給緩存的實現(xiàn)提供了基礎,因為向同一個url發(fā)送相同參數(shù)的GET請求會直接體現(xiàn)在url上支鸡,所以我們可以將相同的url視為同一GET請求冬念。當沒有網(wǎng)絡時,去緩存中查看是否有相應的GET請求牧挣,有則將其返回刘急。

我們需要做的就是在網(wǎng)絡暢通時保存已經(jīng)成功通信的GET請求,可以將其以文件的形式保存在本地浸踩。

但是文件的名稱如何定義是個比較頭疼的問題叔汁,如果以請求的URL作為文件的名稱顯然不太妥當,因為IE對URL長度的限制是2083字節(jié)检碗、Firefox瀏覽器URL的長度限制為65,536個字符据块、chrome瀏覽器URL最大長度限制為8182個字符等等,這么長的文件名占空間是一點折剃,在做字符串匹配時也非常耗時另假。所以應當換一種方式,這時使用hash值比較明智怕犁,因為hash算法對于輸入的任意長度值會轉變?yōu)橐粋€固定長度值輸出边篮。

搞定了文件名我們需要在有網(wǎng)絡時保存成功通信的GET請求:

if (success) {
                //如果請求成功 , 回調請求到的數(shù)據(jù) , 同時 在這里 做本地緩存
                NSString *path = [NSString stringWithFormat:@"%ld.plist", (unsigned long)[url hash]];
                // 存儲的沙盒路徑
                NSString *path_doc = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
                // 歸檔
                [NSKeyedArchiver archiveRootObject:responseObject toFile:[path_doc stringByAppendingPathComponent:path]];
                success(responseObject);
            }

在Objective-C中己莺,我們可以將對象進行歸檔,將GET請求返回的數(shù)據(jù)以對象的形式保存在文件中戈轿,達到緩存的目的凌受。

而當無網(wǎng)絡時,這時去本地緩存上查找是否具有緩存思杯,用新URL的hash值與緩存的URL的hash值做比較胜蛉。

//發(fā)生網(wǎng)絡斷開連接
if ([HFReachabilityManager sharedReachabilityManager].currentReachabilityStatus == NotReachable) {
       
        // 在這里讀取本地緩存
        NSString *path = [NSString stringWithFormat:@"%ld.plist", (unsigned long)[url hash]];
        NSString *path_doc = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        
        id result = [NSKeyedUnarchiver unarchiveObjectWithFile:[path_doc stringByAppendingPathComponent:path]];
//        [KVNProgress showErrorWithStatus:@"無法連接網(wǎng)絡"];
        success(result);
    }

這時,就完成了在無網(wǎng)絡時的網(wǎng)絡請求緩存色乾。

喜歡給我的贊吧 :) ??

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末誊册,一起剝皮案震驚了整個濱河市暖璧,隨后出現(xiàn)的幾起案子案怯,更是在濱河造成了極大的恐慌澎办,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浮驳,死亡現(xiàn)場離奇詭異悍汛,居然都是意外死亡,警方通過查閱死者的電腦和手機至会,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奉件,“玉大人,你說我怎么就攤上這事县貌∈跆眨” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵煤痕,是天一觀的道長梧宫。 經(jīng)常有香客問我摆碉,道長塘匣,這世上最難降的妖魔是什么巷帝? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮楞泼,結果婚禮上笤闯,老公的妹妹穿的比我還像新娘棍厂。我一直安慰自己颗味,他們只是感情好勋桶,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布侥猬。 她就那樣靜靜地躺著,像睡著了一般退唠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞧预,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音盆驹,去河邊找鬼。 笑死躯喇,一個胖子當著我的面吹牛硝枉,可吹牛的內(nèi)容都是我干的廉丽。 我是一名探鬼主播妻味,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼责球!你這毒婦竟也來了焦履?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤裁良,失蹤者是張志新(化名)和其女友劉穎校套,沒想到半個月后价脾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛匙,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡犀变,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年秋柄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骇笔。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡笨触,死狀恐怖懦傍,靈堂內(nèi)的尸體忽然破棺而出芦劣,到底是詐尸還是另有隱情,我是刑警寧澤虚吟,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站偏塞,受9級特大地震影響,放射性物質發(fā)生泄漏烛愧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一怜姿、第九天 我趴在偏房一處隱蔽的房頂上張望疼燥。 院中可真熱鬧,春花似錦醉者、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥槐。三九已至,卻和暖如春颅崩,著一層夾襖步出監(jiān)牢的瞬間几于,已是汗流浹背沿后。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尖滚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓睦裳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親推沸。 傳聞我的和親對象是個殘疾皇子备绽,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理肺素,服務發(fā)現(xiàn),斷路器倍靡,智...
    卡卡羅2017閱讀 134,638評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧塌西!Ngi...
    JokerW閱讀 32,651評論 24 1,002
  • AFHTTPRequestOperationManager 網(wǎng)絡傳輸協(xié)議UDP、TCP办桨、Http、Socket呢撞、X...
    Carden閱讀 4,333評論 0 12
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》饰剥,我們講述了瀏覽器端請求發(fā)起過程殊霞,通過DNS域名解析服務器IP汰蓉,并建...
    七寸知架構閱讀 80,952評論 21 356
  • 好友小玉是一個狂熱的旅行愛好者,我深深懷疑她工作就是為了掙路費顾孽。對于她這樣的人娇跟,我感到很好奇太颤,當然苞俘,她對我也很好奇...
    簡的一天閱讀 279評論 1 0