node.js是什么東西?
現(xiàn)在流行一種說法叫web全棧工程師,講的是一個(gè)web工程師要懂前后端,以及前端的各種牛逼技術(shù),我覺得這個(gè)全棧工程師并不是說讓你一個(gè)人去干一個(gè)團(tuán)隊(duì)的活,而是說你要有足夠的技術(shù)思維以及技術(shù)掌控力,說白了就是你要懂的多,對于整天搞前端,和JavaScript打交道的我們來說,我們不妨來來看一個(gè)用JavaScript實(shí)現(xiàn)的后端平臺(tái),node.js.
- nodejs是以chrome v8為運(yùn)行環(huán)境的一個(gè)平臺(tái),它不是一門語言,而是一個(gè)平臺(tái),
- nodejs致力于是構(gòu)建速度快,穩(wěn)定的網(wǎng)絡(luò)程序更簡單
- 它具有事件驅(qū)動(dòng)和非阻塞I/O的特色,使之輕量級并且高效率
- 它非常適合在分布式設(shè)備運(yùn)行數(shù)據(jù)密集型實(shí)時(shí)應(yīng)用程序
使用chrome v8引擎?
nodejs為什么要使用chrome引擎呢,據(jù)說是當(dāng)時(shí)的創(chuàng)始人在開發(fā)nodejs的時(shí)候,想要?jiǎng)?chuàng)造出來一個(gè)高性能,異步IO,事件驅(qū)動(dòng)的語言,因?yàn)镴avaScript中是單線程執(zhí)行的,所以沒有同步IO,他便選定了JavaScript來作為基礎(chǔ)實(shí)現(xiàn)的語言,同時(shí)由于谷歌的v8引擎是開源的,而且是運(yùn)行JavaScript很快的引擎,便很機(jī)智的選擇了chrome v8引擎來作為基礎(chǔ)環(huán)境了,
nodejs的作用?
講到這里,我們大概的明白了nodejs是一個(gè)平臺(tái),是一個(gè)環(huán)境,它是由chrome v8引擎來做底層支持,使用JavaScript來做語言支持,大概意思就是我們之前使用JavaScript運(yùn)行在瀏覽器端去處理dom,bom操作等等,現(xiàn)在JavaScript運(yùn)行在服務(wù)器去處理數(shù)據(jù)的增刪改查,接受請求,發(fā)送數(shù)據(jù),查找修改文件,WHAT?這么吊?對的,現(xiàn)在使用JavaScript你就可以去做那些以前你覺得很牛逼的事情.
當(dāng)我們輸入一個(gè)url去訪問網(wǎng)站,服務(wù)器端接受到了這個(gè)請求之后,開始去查找請求的文件,然后去執(zhí)行數(shù)據(jù)庫查詢,查詢后將響應(yīng)體返回給瀏覽器,這是一個(gè)大致的過程,那么在以前的服務(wù)器中,例如Apache,每一個(gè)請求事件它都會(huì)去創(chuàng)建一個(gè)新的進(jìn)程去處理這個(gè)請求,
之后,我們有了ajax,不再去進(jìn)行整個(gè)頁面的刷新了,而是進(jìn)行局部的刷新,我們只需要去向服務(wù)器請求我們需要的那一部分?jǐn)?shù)據(jù)就行了,這是一個(gè)巨大的進(jìn)步.
那我們可以再去設(shè)想一個(gè)場景,當(dāng)我們在看朋友圈時(shí),我么每一個(gè)用戶的朋友圈都在實(shí)時(shí)的更新當(dāng)中,按照我們以前的做法是給每一個(gè)用戶都和數(shù)據(jù)庫端有一個(gè)長鏈接(long polling),
所謂的長鏈接,就是我們每個(gè)用戶都和服務(wù)器有一個(gè)鏈接,由于服務(wù)器不會(huì)主動(dòng)向?yàn)g覽器發(fā)送數(shù)據(jù),當(dāng)鏈接建立之后,不會(huì)立馬斷開,服務(wù)器端會(huì)一直在等待,當(dāng)瀏覽器需要