前不久和一個(gè).net同事吃火鍋,臨近結(jié)束提到了前端的技術(shù)框架推正,這位同事也會(huì)前端滩报,但是在他印象里前端似乎依舊是傳統(tǒng)的運(yùn)行于瀏覽器進(jìn)行開(kāi)發(fā);任憑我怎么說(shuō)妇拯,前端已經(jīng)是通過(guò)node進(jìn)行開(kāi)發(fā)并且現(xiàn)在各大公司已經(jīng)很基本的大規(guī)模使用了幻馁,他依舊不信或者說(shuō)不能夠理解node開(kāi)發(fā)在前端的意義, 于是乎我想整理一篇文章告訴他,前端是怎么使用node開(kāi)發(fā)的仗嗦;
一预麸、傳統(tǒng)的JavaScript
傳統(tǒng)的js是運(yùn)行在瀏覽器上的,因?yàn)闉g覽器內(nèi)核分為兩個(gè)部分:
渲染引擎---復(fù)制渲染HTML和CSS,
?JavaScript 引擎---負(fù)責(zé)運(yùn)行 JavaScript, Chrome 使用的 JavaScript 引擎是 V8儒将,它的速度非忱艋觯快且性能好。
二钩蚊、什么是Node.js?
官網(wǎng)上對(duì)其特點(diǎn)描述為:
1. 它是一個(gè)Javascript運(yùn)行環(huán)境
2. 依賴于Chrome V8引擎進(jìn)行代碼解釋
3. 事件驅(qū)動(dòng)
4. 非阻塞I/O
5. 輕量贡翘、可伸縮,適于實(shí)時(shí)數(shù)據(jù)交互應(yīng)用
6. 單進(jìn)程砰逻,單線程
相對(duì)于傳統(tǒng)的JavaScript來(lái)說(shuō)鸣驱,Node.js 是一個(gè)運(yùn)行在服務(wù)端的框架,它的底層就使用了 V8 引擎蝠咆。我們知道 Apache + PHP 以及 Java 的 Servlet 都可以用來(lái)開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)踊东,Node.js 的作用與他們類似,只不過(guò)是使用 JavaScript 來(lái)開(kāi)發(fā)刚操,它大大提升了開(kāi)發(fā)的性能以及便利闸翅。使用node開(kāi)發(fā)還可以使用配套的npm包管理工具:
NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問(wèn)題菊霜,常見(jiàn)的使用場(chǎng)景有以下幾種:
允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用坚冀。
允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用。
允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用鉴逞。
因?yàn)閚ode本身就是一個(gè)服務(wù)端的框架记某,對(duì)于一些簡(jiǎn)單的項(xiàng)目,我們可以不需要后端配合构捡,直接用node進(jìn)行數(shù)據(jù)庫(kù)的增刪改查液南,比如下面的代碼就是通過(guò)使用express進(jìn)行開(kāi)發(fā)的:
通過(guò)配置接口我就可以實(shí)現(xiàn)原來(lái)需要后端配合做的事情了,大大方便了我們對(duì)一些簡(jiǎn)單場(chǎng)景下的應(yīng)用勾徽;
三滑凉、Node開(kāi)發(fā)的缺陷:
雖然node開(kāi)發(fā)已經(jīng)能夠給我們帶來(lái)非常棒的體驗(yàn),那么它存在什么樣的先天不足呢捂蕴,下面是從網(wǎng)上查找的資料:
1. 不適合CPU密集型應(yīng)用譬涡;CPU密集型應(yīng)用給Node帶來(lái)的挑戰(zhàn)主要是:由于JavaScript單線程的原因闪幽,如果有長(zhǎng)時(shí)間運(yùn)行的計(jì)算(比如大循環(huán))啥辨,將會(huì)導(dǎo)致CPU時(shí)間片不能釋放,使得后續(xù)I/O無(wú)法發(fā)起盯腌;
解決方案:分解大型運(yùn)算任務(wù)為多個(gè)小任務(wù)溉知,使得運(yùn)算能夠適時(shí)釋放,不阻塞I/O調(diào)用的發(fā)起;
2. 只支持單核CPU级乍,不能充分利用CPU
3. 可靠性低舌劳,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰
原因:?jiǎn)芜M(jìn)程玫荣,單線程
解決方案:(1)Nnigx反向代理甚淡,負(fù)載均衡,開(kāi)多個(gè)進(jìn)程捅厂,綁定多個(gè)端口贯卦;
(2)開(kāi)多個(gè)進(jìn)程監(jiān)聽(tīng)同一個(gè)端口,使用cluster模塊焙贷;
4. 開(kāi)源組件庫(kù)質(zhì)量參差不齊撵割,更新快,向下不兼容
5. Debug不方便辙芍,錯(cuò)誤沒(méi)有stack trace
今天是大年初一啡彬,對(duì)于今年的規(guī)劃當(dāng)然是希望有機(jī)會(huì)進(jìn)入一個(gè)非常棒的團(tuán)隊(duì)學(xué)習(xí);大樓之下故硅,我自知渺小庶灿,頂峰雖然唾手不可及,也要努力加油吃衅!