nodejs基礎四(橫掃nodejsAPI)

一.URL網(wǎng)址解析的好幫手(node API -- URL)

url的方法
1.parse:分析、解析
eg: url.parse('http://www.baidu.com')
protocol:底層協(xié)議(http/ftp);
slashes:是否有協(xié)議雙斜線;
host:Ip地址/域名;
port:端口(默認80);
hostname:主機名;
hash:錨點(滾動到當前為止);
search:查詢字符串參數(shù);
query:傳遞參數(shù);
pathname:路徑名;
path:路徑;
href:完整超鏈接;

url.parse('http://www.baidu.com') parse:分析、解析

url.parse(urlStr[,parseQueryString][,slashesDenoteHost]):將定位符解析成對象,
可選參數(shù)1設置為true,對象中query可解析出;
可選參數(shù)2設置為true,對象中host正確解析。

parse 加參數(shù)

2.format:格式化 顧名思義,作用是生成一個鏈接(將對象解析成定位串)
eg: url.format({
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.imooc.com',
port: null,
hostname: 'www.imooc.com',
hash: null,
search: null,
query: null,
pathname: '/video/6710',
path: '/video/6710',
href: 'http://www.imooc.com/video/6710' })

url.fomat()

3.resolve: 將一個基本url和指定超鏈接目標url合并

url.resolve()

二.QueryString參數(shù)處理小利器

querystring.stringify(obj,para1,para2)://將對象轉(zhuǎn)化成url中query部分的形式
參數(shù):1.要轉(zhuǎn)化的對象
2.鏈接符(默認&)
3.鍵與值之間的符號(默認=)
querystring.parse(string,para1,para2)//將query字符串轉(zhuǎn)化成對象(反序列化)
參數(shù):
1.query字符串
2.鏈接符(默認&)
3.鍵與值之間的符號(默認=)
4.參數(shù)的個數(shù)(默認最多1000個,0就沒有限制)
querystring.escape(string)//文字轉(zhuǎn)譯
querystring.unescape(string)//反轉(zhuǎn)譯

query.stringify() ,query.parse()
query.escape(),query.unscape

三. HTTP知識先填坑

什么是HTTP?
是一種協(xié)議,計算機要共同遵從這種規(guī)則,才能相互通信。
·http客戶端發(fā)起請求,創(chuàng)建端口
·http服務器在端口監(jiān)聽客戶請求
·http服務器向客戶端返回狀態(tài)和內(nèi)容

用瀏覽器打開一個網(wǎng)站,http走過的環(huán)節(jié)
一、首先,對網(wǎng)站進行DNS域名解析
1、瀏覽器搜索自身的DNS緩存-》
2、搜索操作系統(tǒng)自身的DNS緩存(瀏覽器沒有找到緩存或過期)-》
3、讀取本地的HOST文件-》
4、瀏覽器發(fā)起一個DNS的一個系統(tǒng)調(diào)用{
4.1寬帶運營商服務器查看本身緩存-》
4.2運營商服務器發(fā)起一個迭代DNS解析的請求(根域->頂級域->域名注冊商(IP地址))
4.3運營商服務器把結(jié)果返回給操作系統(tǒng)內(nèi)核同時緩存起來
4.4操作系統(tǒng)內(nèi)核把結(jié)果返回給瀏覽器
}
5、讓瀏覽器拿到網(wǎng)站的IP地址,DNS解析完成,發(fā)起HTTP"三次握手"
6、TCP/IP連接建立起來后,瀏覽器就可以向服務器發(fā)送HTTP請求,比方說,用HTTP的GET方法請求一個根域里的一個域名,協(xié)議可以采用HTTP1.0的一個協(xié)議
7、服務器端接受到了這個請求,根據(jù)路徑參數(shù),經(jīng)過后端的一些處理之后,把處理后的一個結(jié)果的數(shù)據(jù)返回給瀏覽器。(這時會把網(wǎng)站完整的HTML頁面代碼返回給瀏覽器)
8、瀏覽器拿到了網(wǎng)站的完整的HTML頁面代碼,在解析和渲染這個頁面的時候,里面的JS、CSS、圖片靜態(tài)資源,他們同樣也是一個個HTTP請求,都需要經(jīng)過上面的主要的七個步驟.
9、瀏覽器根據(jù)拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現(xiàn)給了用戶

HTTP流程可分為請求/響應兩部分
HTTP的組成:{
HTTP頭:發(fā)送的是一些附加的信息:內(nèi)容類型服務器發(fā)送響應的日期,HTTP狀態(tài)碼
正文信息:用戶提交的表單信息
}

//筆記二
一、域名解析

  1. 瀏覽器先搜索自身的DNS緩存
    2.搜索操作系統(tǒng)的自身的DNS緩存(瀏覽器緩存失效的時候)
    3.讀取本地的HOST文件
    4.瀏覽器發(fā)起一個dns系統(tǒng)請求。
    5、寬帶運營商服務器查看本身緩存。
    6、運營商服務器發(fā)起一個迭代DNS解析的請求(根域,頂級域,域名注冊商),最后返回結(jié)果給操作系統(tǒng)內(nèi)核,同時進行緩存。
    7、操作系統(tǒng)把結(jié)果返回瀏覽器。
    以上是讓瀏覽器拿到IP地址,DNS解析完成。

二.然后,在瀏覽器獲得域名的IP地址后,發(fā)起“三次握手”,建立TCP/IP連接。

三、在TCP/IP連接建立起來后,瀏覽器就可以向服務器發(fā)送HTTP請求了。比如,用HTTP的GET方法請求一個根域里的某個域名,協(xié)議可以采用HTTP 1.0 。

四、服務器端接受這個請求,根據(jù)路徑參數(shù),經(jīng)過后端的一些處理之后,把處理后的一個結(jié)果以數(shù)據(jù)的形式返回給瀏覽器,如果是imooc.com網(wǎng)站的頁面,服務器就會把完整的HTML頁面代碼返回給瀏覽器。
五、瀏覽器拿到了慕課網(wǎng)的完整的HTML頁面代碼,在解析和渲染這個頁面的時候,里面的JS、CSS、圖片靜態(tài)資源,同樣也是一個個HTTP請求,都需要經(jīng)歷以上的步驟
六、瀏覽器根據(jù)拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現(xiàn)給了用戶

//筆記四
Timing資源加載所要耗費的時間線
·Stalled:等待時機,瀏覽器要發(fā)生請求,到能發(fā)出請求的時間。不包括DNS查詢和連接建立時間
·Proxy negotiation:代理協(xié)商的時間
·Request sent:請求時間。從請求報文的第一個字節(jié)發(fā)出,到最后一個字節(jié)發(fā)送完畢的時間
·Waiting(TTFB):請求發(fā)出后至收到第一個字節(jié)響應的時間
Content Download:從接受到響應第一個字節(jié)開始到最后一個字節(jié)結(jié)束花費的時間

http請求方法:
·Get:獲取,讀取數(shù)據(jù)
·Post:提交資源
·Put:更新
·Delete:刪除
·Head 與get方法相同,但服務器不傳回資源

狀態(tài)碼:服務器端返回瀏覽器,告知瀏覽器請求成功或失敗的信息
·1XX請求已經(jīng)接受
·2XX請求成功并處理成功
·3XX重定向
·4XX客戶端錯誤
·5XX服務器端錯誤

200:OK,請求成功
400:客戶端請求有語法錯誤
401:請求未經(jīng)授權(quán)
403:收到請求,但不提供服務
404:資源未找到
500:服務器端未知錯誤
503:服務器端當前不能處理請求

四.事件回調(diào)進階

HTTP 概念進階

  1. 什么是回調(diào)?
    回調(diào)是異步編程時的基礎,將后續(xù)邏輯封裝成起始函數(shù)的參數(shù),逐層嵌套
  2. 什么是同步/異步?
    同步是指:發(fā)送方發(fā)出數(shù)據(jù)后,等接收方發(fā)回響應以后才發(fā)下一個數(shù)據(jù)包的通訊方式。
    異步是指:發(fā)送方發(fā)出數(shù)據(jù)后,不等接收方發(fā)回響應,接著發(fā)送下個數(shù)據(jù)包的通訊方式。
  3. 什么是I/O?
    磁盤的寫入(in)磁盤的讀取(out)
  4. 什么的單線程/多線程?
    一次只能執(zhí)行一個程序叫做單線程
    一次能執(zhí)行多個程序叫多線程
  5. 什么是阻塞/非阻塞?
    阻塞:前一個程序未執(zhí)行完就得一直等待
    非阻塞:前一個程序未執(zhí)行完時可以掛起,繼續(xù)執(zhí)行其他程序,等到使用時再執(zhí)行
  6. 什么是事件?
    一個觸發(fā)動作(例如點擊按鈕)
  7. 什么是事件驅(qū)動?
    一個觸發(fā)動作引起的操作(例如點擊按鈕后彈出一個對話框)
  8. 什么是基于事件驅(qū)動的回調(diào)?
    為了某個事件注冊了回調(diào)函數(shù),但是這個回調(diào)函數(shù)不是馬上執(zhí)行,只有當事件發(fā)生的時候,才會調(diào)用回調(diào)函數(shù),這種函數(shù)執(zhí)行的方式叫做事件驅(qū)動~這種注冊回調(diào)就是基于事件驅(qū)動的回調(diào),如果這些回調(diào)和異步I/O(數(shù)據(jù)寫入、讀取)操作有關(guān),可以看作是基于回調(diào)的異步I/O,只不過這種回調(diào)在nodejs中是有事件來驅(qū)動的
  9. 什么是事件循環(huán)?
    //事件循環(huán)Eventloop,倘若有大量的異步操作,一些I/O的耗時操作,甚至是一些定時器控制的延時操作,它們完成的時候都要調(diào)用相應的回調(diào)函數(shù),從而來完成一些密集的任務,而又不會阻塞整個程序執(zhí)行的流程,此時需要一種機制來管理,這種機制叫做事件循環(huán).
    總而言之就是:管理大量異步操作的機制叫做事件循環(huán)Event Loop:
    回調(diào)函數(shù)隊列。異步執(zhí)行的函數(shù)會被壓入這個隊列; 隊列被循環(huán)查詢。


    回調(diào)函數(shù)實例

    異步實例

五.HTTP 源碼解讀之先了解作用域、上下文

Nodejs適合于高并發(fā)、I/O密集操作。
HTTP源碼解讀
什么是作用域?
與調(diào)用函數(shù),訪問變量的能力有關(guān)。
作用域分為:局部和全局(在局部作用域里可以訪問到全局作用域的變量,但在局部作用域外面就訪問不到局部作用域里面所設定的變量)
什么是上下文?
與this關(guān)鍵字有關(guān),是調(diào)用當前可執(zhí)行的代碼的引用,this總是指向調(diào)用這個方法的對象
js里的this通常是當前函數(shù)的擁有者
this是js的一個關(guān)鍵字,代表函數(shù)運行時自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用
this指向當前function的擁有者。即上下文,call和apply可以改變上下文。


this實例

六.HTTP源碼解讀

gtuhub倉庫主頁按T可以呼出搜索

七.HTTP性能小測試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

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