真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

[Node.js]一.什么是Node.js,而又能做什么?

一.什么是Node.js,而又能做什么?

什么是Node.js

Q:Node.js?

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、湖南網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為湖南等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

A:這貨不是Javascript。但它的的確確是Javascript!

Q:一個(gè)新的Javascript框架?

A:不是框架,哦,如果不嚴(yán)格地說(shuō),好像也算是框架,但是在瀏覽器中它不并怎么受支持。

Q:那有個(gè)屁用?

A:那就錯(cuò)了,它的作用會(huì)讓你和你的小伙伴驚呆的。

Q:哦?我不相信!

A:額,如果有人告訴你,這貨是服務(wù)器端開(kāi)發(fā)的,就像Java,PHP,.NET,GO,Python和Ruby等等做服務(wù)器端開(kāi)發(fā)一樣,你會(huì)相信嗎?

Q:是嗎?你這是在侮辱我的智商!

A:別著急,首先要申明,當(dāng)初網(wǎng)景這個(gè)公司開(kāi)發(fā)LiveScript的時(shí)候,本來(lái)就在同步制作服務(wù)端的開(kāi)發(fā),只是因?yàn)槟莻€(gè)時(shí)代已經(jīng)有很多有名的后臺(tái)語(yǔ)言誕生,從而放棄這個(gè)夢(mèng)想,所以你現(xiàn)在只看到瀏覽器中的Javascript,而且它被人長(zhǎng)久誤會(huì)為玩具。哦,對(duì)了,JavaScript和LiveScript是一個(gè)東西。

Q:好吧,這好像有點(diǎn)意思,那么它能做什么?

A:不要著急,這么偉大的一個(gè)創(chuàng)舉,你為什么不多體會(huì)一下呢,其實(shí)一直有人在做這樣的事情,只不過(guò)沒(méi)有被得到廣泛應(yīng)用,或者只是自己用來(lái)玩玩,而不像V8團(tuán)隊(duì)這樣聰明。

Q:V8?

A:沒(méi)錯(cuò),V8,這是一個(gè)在丹麥的Google團(tuán)隊(duì),專(zhuān)門(mén)開(kāi)發(fā)Javascript引擎,或許你已經(jīng)無(wú)時(shí)無(wú)刻的都在使用它,也許你用過(guò)Chrome瀏覽器,或者基于Chromium的瀏覽器,那么你可以體會(huì)到頁(yè)面的加載速度如此之快,這些一部分得利于V8引擎。

Q:那你的意思是,V8引擎可以將Javascript用于服務(wù)器功能開(kāi)發(fā)?

A:正如你所說(shuō),谷歌開(kāi)源了這個(gè)引擎,不僅僅開(kāi)源這樣簡(jiǎn)單,在Javascript的發(fā)展到路上具有劃時(shí)代的意義。在前端,jQuery的出現(xiàn)加速了頁(yè)面性能的優(yōu)化,提高了Javascript的腳本功能,從而使得更多的前端框架出現(xiàn),而現(xiàn)在Javascript的服務(wù)端功能得以東山再起,使得Javascript不在是單兵作戰(zhàn)。

又能做什么

Q:我已經(jīng)知道Javascript的服務(wù)端功能了,那么這個(gè)項(xiàng)目就叫做Node.js?

A:是的。

Q:那他能做什么呢?

A:服務(wù)端想要做到的事情基本都能做到。

Q:它由什么編寫(xiě)而成的呢?

A:C++

Q:那么它對(duì)底層的支持如何?

A:嗯,這樣給你說(shuō)吧,Node.js的實(shí)質(zhì)就是用Javascript的代碼規(guī)范通過(guò)C++進(jìn)行了實(shí)現(xiàn)和封裝,現(xiàn)在Node.js正在快速發(fā)展,對(duì)底層的支持也在逐步擴(kuò)展,其中很多原生的Node都是使用底層的方式進(jìn)行運(yùn)作的。

Q:那這么說(shuō),我是否可以開(kāi)發(fā)HTTP或者HTTPS協(xié)議這樣的服務(wù)呢?

A:當(dāng)然可以,而且還非常簡(jiǎn)單,甚至可以做TCPsocket開(kāi)發(fā),當(dāng)然UDP一樣支持。

Q:如果這樣,我想我會(huì)考慮學(xué)習(xí)這個(gè)語(yǔ)言,可是,它有什么優(yōu)點(diǎn)和缺點(diǎn),現(xiàn)在的服務(wù)端語(yǔ)言這么多,我為什么要使用它呢?

A:當(dāng)然,你沒(méi)有必要必須要使用它,或許他也不是一門(mén)必修的語(yǔ)言課程,但是他的魅力足以讓你學(xué)習(xí)。如果說(shuō)優(yōu)點(diǎn),那么就是它是單線程多核多進(jìn)程的語(yǔ)言,并且在他眼里所有的都是事件,而缺點(diǎn)也是因?yàn)槿绱?,它無(wú)法滿(mǎn)足實(shí)時(shí)密集型請(qǐng)求處理,而事件模型是很多人無(wú)法理解的。

Q:?jiǎn)尉€程?我的天,那效率怎么能提高呢?

A:不,其實(shí)多線程的語(yǔ)言處理是以消耗內(nèi)存為代價(jià),對(duì)于CPU的使用率一直不是很好,V8團(tuán)隊(duì)堅(jiān)信,單線程已經(jīng)夠用了,使用非阻塞式IO和請(qǐng)求大大提高CPU的使用率,如果使CPU達(dá)到100%利用,那最好不過(guò)了,并且這對(duì)內(nèi)存的釋放也是有好處的。但也是因?yàn)槿绱藢?duì)于密集方式請(qǐng)求,可能會(huì)出現(xiàn)阻塞,但好在當(dāng)前密集方式請(qǐng)求并不是很多。

Q:好吧,那么什么是事件模型,我不太明白。

A:事件模型,從概念上來(lái)說(shuō)就是通過(guò)一些列事件的綁定和觸發(fā)進(jìn)行交互的反饋,如果你使用過(guò)一些語(yǔ)言的監(jiān)聽(tīng)器,或者理解什么是監(jiān)聽(tīng)者模式,你會(huì)更好的理解這些,但是這里我不想太多講解這些,你可以簡(jiǎn)單的理解為,所有的處理都像是在發(fā)命令,而對(duì)這個(gè)命令有興趣的人會(huì)有反應(yīng),從而做一些事情。

Q:哦,那如果這樣說(shuō),Node不是順序執(zhí)行了?

A:是的,這正是事件模型的核心,它不考慮順序,而是以實(shí)際的事件響應(yīng)順序?yàn)橹鳎赃@也給一些想學(xué)習(xí)這個(gè)語(yǔ)言的人帶來(lái)了一些障礙,或許無(wú)法很好的理解這一點(diǎn),但是我想應(yīng)該先去學(xué)習(xí)一下什么是監(jiān)聽(tīng)者模式就夠了。

忽視了什么

Q:很好,我現(xiàn)在知道一些大概了,那我們是不是忽略了什么?

A:你說(shuō)的很對(duì),我們忽略了很多,但是猶如之前的對(duì)話(huà),其中的缺點(diǎn)也就是我們所忽略的,Node不是萬(wàn)能的,比如他無(wú)法實(shí)現(xiàn)客戶(hù)端界面的開(kāi)發(fā),至少目前是這樣,對(duì)數(shù)據(jù)庫(kù)的鏈接有些官方?jīng)]有發(fā)行和開(kāi)發(fā),你或許可以在社區(qū)中看到有類(lèi)似MySQL的處理庫(kù),但這不意味者這是官方發(fā)行版本,所以很多人不愿意通過(guò)Node與數(shù)據(jù)庫(kù)進(jìn)行鏈接,當(dāng)然現(xiàn)在Node對(duì)NOSQL類(lèi)型數(shù)據(jù)庫(kù)鏈接支持的不錯(cuò)。

Q:社區(qū)?那么這個(gè)社區(qū)活躍嗎?

A:非常活躍,也正式因?yàn)槿绱?,Node的發(fā)展速度非常驚人,比如你可以自己構(gòu)建一個(gè)LIB,通過(guò)npm進(jìn)行發(fā)布的升級(jí),就是這么簡(jiǎn)單。

Q:那他在什么系統(tǒng)下開(kāi)發(fā)?

A:除了傳統(tǒng)的linux和unix外,現(xiàn)在也支持windows,當(dāng)然windows下畢竟不是主流,我想你不也不會(huì)考慮在windows下進(jìn)行開(kāi)發(fā)。

Q:是的。不過(guò)能否給我一個(gè)簡(jiǎn)單的例子,讓我體會(huì)一下呢?

A:沒(méi)有問(wèn)題。

一個(gè)簡(jiǎn)單的案例

var http = require('http');
var util = require('util');
var querystring = require('querystring');
http.createServer(function(request,response){
    var post = '';
    request.on('data',function(chunk){
        post += chunk;
        console.log(chunk);
    });
    request.on('end',function(){
        post = querystring.parse(post);
        response.end(util.inspect(post));
    });
}).listen(8080);

分享文章:[Node.js]一.什么是Node.js,而又能做什么?
網(wǎng)址分享:http://weahome.cn/article/ipspsd.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部