網(wǎng)絡(luò)請求和性能優(yōu)化

URL:

"URL":統(tǒng)一資源定位符。協(xié)議頭/主機地址/路徑。

請求協(xié)議:

1,file://訪問的是本地計算機上的資源。

2,ftp://訪問的是共享主機的文件資源。

3,mailto://訪問的是電子郵件地址。

4,http://超文本傳輸協(xié)議,訪問的是遠程的網(wǎng)絡(luò)資源。

TCP/IP協(xié)議。

IP按照層次劃分,IP網(wǎng)際協(xié)議位于網(wǎng)絡(luò)層,IP協(xié)議的作用就是把各種數(shù)據(jù)包傳送給對象。

TCP按照層次劃分,TCP協(xié)議位于傳輸層,提供了可靠的字節(jié)流服務(wù),字節(jié)流服務(wù)指為了翻遍傳輸大塊的數(shù)據(jù)分割成以報文段為單位的數(shù)據(jù)包進行管理。而且TCP協(xié)議能夠確認數(shù)據(jù)最終是否已經(jīng)送達到對方。

為了準(zhǔn)確無誤的將數(shù)據(jù)送達到目的地,TCP采用了三次握手的策略:握手工程中使用TCP的標(biāo)志、SYN和ACK。

三次握手過程:發(fā)送端首先發(fā)送一個帶SYN標(biāo)志的數(shù)據(jù)包給對方。接收端接收到后,回傳一個帶有SYN/ACK標(biāo)志的數(shù)據(jù)包,以表示傳達確認信息,最終發(fā)送端再回傳一個帶ACK標(biāo)志的數(shù)據(jù)包,標(biāo)識握手結(jié)束。

DNS服務(wù)和HTTP協(xié)議一樣位于應(yīng)用層,他提供域名到IP地址間的解析服務(wù)。


性能優(yōu)化:

出發(fā)點:1,努力消除或減少不必要的網(wǎng)絡(luò)延遲。2,將需要傳輸?shù)臄?shù)據(jù)壓縮至最少。

性能優(yōu)化的最佳實踐:

1,減少DNS查找:每次主機名的解析都需要一次網(wǎng)絡(luò)往返,從而增加了請求的延遲時間,同時還會阻塞后續(xù)的請求。

2,重用TCP連接:盡可能的使用持久連接,以消除因TCP握手和慢啟動導(dǎo)致的延遲。

3,減少HTTP重定向。HTTP沖定向需要額外的DNS查詢、TCP握手等非常耗時,最佳的重定向次數(shù)為0.

4,使用CDN(內(nèi)容分發(fā)網(wǎng)絡(luò)):把數(shù)據(jù)放在離用戶地理位置更近的地方,可以明顯減少每次TCP連接的網(wǎng)絡(luò)延遲,增大吞吐量。

5,刪除沒有必要請求的資源。

6,在客戶端緩存資源:緩存必要的應(yīng)用資源,避免每次都重復(fù)請求相同的內(nèi)容,例如多圖片下載可以考慮使用緩存。

7,內(nèi)容在傳輸前先壓縮:傳輸數(shù)據(jù)之前應(yīng)該先壓縮應(yīng)用資源,把要傳輸?shù)淖止?jié)減少到最小,在壓縮的時候確保對每種不同的資源采用最好的壓縮手段。

8,消除不必要的請求開銷:減少請求的HTTP首部數(shù)據(jù)(比如HTTP cookie).

9,并行處理請求和響應(yīng):請求和響應(yīng)的派對都會導(dǎo)致延遲,可以嘗試并行的處理請求和響應(yīng)(利用多個HTTP1.1連接實現(xiàn)并行下載,在可能的情況下使用HTTP管道計數(shù))。

10,針對協(xié)議版本采取優(yōu)化措施。升級到HTTP2.0。


網(wǎng)絡(luò)請求:

"GET和POST請求"區(qū)別在于參數(shù)的傳遞。GET參數(shù)在url后面,參數(shù)不能超過1KB,POST的請求放在請求體中,理論上POST傳遞的數(shù)據(jù)量沒有限制,具體還得按服務(wù)器的處理能力。

iOS中發(fā)送請求的方案:1,NSURLConnection:是03年推出的技術(shù),沒怎么接觸過。

2,NSURLSession:13年iOS7推出以后,用來取代NSURLConnection的技術(shù)。

3,第三方框架:AFNetworking。工作中用的比較多,方便快捷。

"使用NSURLSession發(fā)送網(wǎng)絡(luò)請求"創(chuàng)建task,然后執(zhí)行task。

NSURLSessionTask是一個抽象類,本身是不能使用的,只能使用它的子類:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。

發(fā)送GET和POST請求

/*

發(fā)送GET請求:

1,創(chuàng)建NSURLSession對象(或者用單利對象)

NSURLSession *session = [NSURLSession sharedSession];

2,根據(jù)URL創(chuàng)建請求。(url后直接跟請求內(nèi)容)

NSURLRequest *request = [NSURLRequest requestWithURL:url];

3,根據(jù)請求創(chuàng)建task。

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

//拿到響應(yīng)頭信息

NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

//4.解析拿到的響應(yīng)數(shù)據(jù)

NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);

}];

4,還得執(zhí)行task。(task剛創(chuàng)建出來默認是掛起狀態(tài)的,需要調(diào)用該方法啟動任務(wù))

[dataTask resume];

還可以使用第二種方法:該方法可以直接填寫url參數(shù),內(nèi)部會將url包裝成請求

- (nullable NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error))completionHandler;

發(fā)送POST請求:

1,創(chuàng)建NSURLSession對象(或者用單利對象)

NSURLSession *session = [NSURLSession sharedSession];

2,根據(jù)URL創(chuàng)建請求對象。(url后請求內(nèi)容封閉到請求體內(nèi)部)

NSURLRequest *request = [NSURLRequest requestWithURL:url];

3,修改請求模式為POST。

request.HTTPMethod = @"POST";

4,設(shè)置請求體:

request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];

5,根據(jù)請求創(chuàng)建task。

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

//拿到響應(yīng)頭信息

NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

//解析拿到的響應(yīng)數(shù)據(jù)

NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);

}];

6,執(zhí)行task。

[dataTask resume];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄 網(wǎng)絡(luò)基本概念 TCP/IP協(xié)議簇基本概念 HTTP 網(wǎng)絡(luò)開發(fā)技術(shù)解決方案 數(shù)據(jù)解析 網(wǎng)絡(luò)優(yōu)化 1. 網(wǎng)絡(luò)基本...
    Ryan___閱讀 1,463評論 1 0
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,552評論 0 6
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā),例如說新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,029評論 2 7
  • URLSessionNSURLSession是iOS7中新的網(wǎng)絡(luò)接口,與NSURLConnection是并列的。當(dāng)...
    醉葉惜秋閱讀 1,476評論 0 0
  • 前言 簡單介紹: // OSI(開放式系統(tǒng)互聯(lián)), 由ISO(國際化標(biāo)準(zhǔn)組織)制定 // 1. 應(yīng)用層 // 2....
    GitHubPorter閱讀 1,309評論 2 4

友情鏈接更多精彩內(nèi)容