中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
初識(shí)Node.js之Node.js與java作為后臺(tái)服務(wù)器的對(duì)比

最近去了新公司,又拾起了被我拋下許久的后端了,不過(guò)因?yàn)楣镜男枨螅蠖瞬捎?strong>Node.js,最近一直在學(xué)習(xí)Node.js,隨著逐漸深入的了解,發(fā)現(xiàn)真的Node.js能越來(lái)越變得熱門(mén)是有其存在的道理的。可能有人會(huì)說(shuō),Java作為后端語(yǔ)言一直隱隱有龍頭老大的姿勢(shì),為何我們還要去學(xué)Node.js呢?Node.js究竟是什么?它是新的語(yǔ)言還是新的框架,是新的工具抑或只是一個(gè)簡(jiǎn)單的JavaScript文件?

運(yùn)行時(shí)環(huán)境
我們眾所周知Java具有一個(gè)稱作JRE的運(yùn)行時(shí)環(huán)境來(lái)使得java程序能夠順利運(yùn)行。JRE有一個(gè)稱為JVM的虛擬機(jī)。JVM有許多組件,如垃圾回收器(GC),即時(shí)(JIT)編譯器,解釋器,類(lèi)裝載器,線程管理器,異常處理器,用于在不同時(shí)間執(zhí)行不同的任務(wù)。JRE還有一系列的庫(kù)來(lái)幫助運(yùn)行時(shí)的Java程序。

   我們?yōu)槭裁匆蝗粻砍兜絁RE運(yùn)行時(shí)環(huán)境呢,其實(shí)正是為了與Node作比較,Node不是一種語(yǔ)言,也不是框架,更不是工具,它是運(yùn)行JavaScript應(yīng)用程序的運(yùn)行時(shí)環(huán)境。Node.js有一個(gè)稱為JavaScript Virtual Machine的虛擬機(jī)。它為基于JavaScript的應(yīng)用程序生成機(jī)器代碼,以便在不同的平臺(tái)上啟用它。這個(gè)虛擬機(jī)就是Google的V8引擎,也有主要組件,如JIT和GC,分別用于執(zhí)行任務(wù),運(yùn)行時(shí)編譯,和內(nèi)存管理。

發(fā)展?jié)摿?/strong>
判斷JavaNode的發(fā)展?jié)摿赡芤獜钠浔澈蟮纳鷳B(tài)社區(qū)和支持庫(kù)上切入,然而以Java為核心的傳統(tǒng)體系自然比不上Node這樣的新勢(shì)力,簡(jiǎn)而言之,Java成熟而龐大,Node迅捷而活躍。Java其功能性和實(shí)用性自然不必多說(shuō),但是Java包含了大量的樣品代碼,擾亂了程序猿所想表達(dá)的意圖,就不如Java三大框架之一的spring,程序猿在使用spring的時(shí)候servlet,數(shù)據(jù)持久,以及構(gòu)成系統(tǒng)的底層的東西,spring框架已經(jīng)封裝好會(huì)幫助你處理這一切,我們只需要專注于寫(xiě)業(yè)務(wù)層代碼就足以。但是在Spring中,子系統(tǒng)一個(gè)接一個(gè),哪怕你犯最微小的錯(cuò)誤,它都會(huì)用讓你崩潰的異常來(lái)懲罰你??赡芫o接著你就會(huì)看到巨大的異常信息。里面包含著一個(gè)一個(gè)你根本不知道的封裝好的方法,Spring做了許多工作來(lái)實(shí)現(xiàn)代碼的功能。這種級(jí)別的抽象顯然需要大量的邏輯,長(zhǎng)長(zhǎng)的異常信息不一定是壞事,它指出了一個(gè)癥狀:這需要多少內(nèi)存和性能上的額外開(kāi)銷(xiāo)?spring是怎么執(zhí)行的?框架需要解析方法名、猜測(cè)程序員的意圖、構(gòu)建類(lèi)似于抽象語(yǔ)法樹(shù)的東西、生成SQL等等。這些事情的額外開(kāi)銷(xiāo)有多大?所以說(shuō)使用Java掩蓋復(fù)雜性并不會(huì)因此簡(jiǎn)單化,只會(huì)讓系統(tǒng)更復(fù)雜。Java嚴(yán)格的類(lèi)型檢查使得Java幫你避免許多類(lèi)型的bug,因?yàn)椴缓玫拇a無(wú)法通過(guò)編譯。Java的強(qiáng)類(lèi)型的缺點(diǎn)就是太多樣板代碼。程序員要不斷進(jìn)行類(lèi)型轉(zhuǎn)換,程序員要花掉更多時(shí)間寫(xiě)精確的代碼,使用更多的樣板代碼,以圖早期發(fā)現(xiàn)錯(cuò)誤并改正。

    而Node.js恰恰相反。線程會(huì)導(dǎo)致更復(fù)雜化的系統(tǒng)。所以Node.js采用輕量級(jí),單線程的系統(tǒng),利用了js的匿名函數(shù)進(jìn)行異步回調(diào),你只需要簡(jiǎn)單的使用匿名函數(shù),也就是閉包。不需要搜索正確的抽象接口,只需要寫(xiě)下業(yè)務(wù)代碼,沒(méi)有任何冗余。這就是使用Node.js的最大好處,不過(guò)異步回調(diào)自然也出現(xiàn)一個(gè)急需解決的問(wèn)題:回調(diào)陷阱。    在Node.js中,我們不斷嵌套回調(diào)函數(shù)的同時(shí),很容易就陷入回調(diào)函數(shù)的陷阱中,每層嵌套都會(huì)讓代碼更復(fù)雜,使得錯(cuò)誤處理和結(jié)果處理更困難。一個(gè)相關(guān)的問(wèn)題就是js語(yǔ)言不會(huì)幫助程序員恰當(dāng)?shù)乇磉_(dá)異步執(zhí)行。其實(shí)有些庫(kù)會(huì)使用Promise來(lái)簡(jiǎn)化異步操作,但是看起來(lái)我們把問(wèn)題簡(jiǎn)單化了,但是事實(shí)上代碼層面更復(fù)雜化了,Promise用了許多樣板代碼,掩蓋了程序員的真實(shí)意圖。后來(lái)Node.js支持ES5與ES6,可以采用async/await函數(shù)重寫(xiě)回調(diào)函數(shù)。還是同樣的異步結(jié)構(gòu),但使用了正常的循環(huán)結(jié)構(gòu)來(lái)書(shū)寫(xiě)。錯(cuò)誤和結(jié)果處理的位置也很自然,代碼更易于理解,更容易編寫(xiě),而且也可以很容易地理解程序員的意圖?;卣{(diào)陷阱并不是用掩蓋復(fù)雜性的方式解決的。相反,語(yǔ)言和范式的改變解決了回調(diào)陷阱的問(wèn)題,同時(shí)還解決了過(guò)多樣板代碼的問(wèn)題。有了async函數(shù),代碼就更漂亮了。簡(jiǎn)單化的解決方法,將Node.js的缺點(diǎn)轉(zhuǎn)化為了優(yōu)點(diǎn)。    但是JavaScript的類(lèi)型很松散。而且在你書(shū)寫(xiě)代碼的時(shí)候不會(huì)進(jìn)行報(bào)錯(cuò),許多類(lèi)型不需要定義,通常也不需要用類(lèi)型轉(zhuǎn)換。因此代碼更清晰易讀,但存在漏掉編碼錯(cuò)誤的風(fēng)險(xiǎn),只有在編譯的時(shí)候才會(huì)去檢查你語(yǔ)法以及邏輯是否存在問(wèn)題,所以在Node.js中,為了更好的調(diào)試BUG,Node支持將程序分成不同的模塊,因?yàn)橛心K的存在,將錯(cuò)誤發(fā)生的范圍縮小到某個(gè)范圍內(nèi),使得Node.js模塊更容易測(cè)試。

包管理
Java最重要的問(wèn)題之一就是沒(méi)有統(tǒng)一的包管理系統(tǒng),可能有人會(huì)和我說(shuō)Maven.但是無(wú)論是用途、易用性還是功能上,MavenNode.js的包管理系統(tǒng)相比簡(jiǎn)直是天壤之別。npmNode.js 官方提供的包管理工具,他已經(jīng)成了 Node.js 包的標(biāo)準(zhǔn)發(fā)布平臺(tái),用于 Node.js 包的發(fā)布、傳播、依賴控制。npm 提供了命令行工具,使你可以方便地下載、安裝、升級(jí)、刪除包,也可以讓你作為開(kāi)發(fā)者發(fā)布并維護(hù)包。最好的地方是npm代碼庫(kù)不僅供Node.js使用,也可以讓前端工程師使用。所有的前端JavaScript庫(kù)都以npm包的形式存在。許多前端工具如Webpack都是用Node.js編寫(xiě)的。

性能
Java使用HotSpot這個(gè)超級(jí)虛擬機(jī),它采用了多字節(jié)編譯策略。它會(huì)檢測(cè)經(jīng)常執(zhí)行的代碼,一段代碼執(zhí)行次數(shù)越多,就會(huì)應(yīng)用越多的優(yōu)化。因此HotSpot性能相對(duì)來(lái)說(shuō)更快。Node底層選擇用c++v8引擎來(lái)實(shí)現(xiàn)的,Node.js的事件驅(qū)動(dòng)機(jī)制,這意味著要面對(duì)大規(guī)模的http請(qǐng)求,Node.js是憑借事件驅(qū)動(dòng)來(lái)完成的,性能部分是不用擔(dān)心的,并且很出色。而且,由于V8引擎的改進(jìn),Node.js的每次發(fā)布都會(huì)帶來(lái)巨大的性能提升。

    雖然Node對(duì)高并發(fā)應(yīng)用有著極高的性能,但是Node.js也有著自己的缺點(diǎn):

Node不適合CPU密集型應(yīng)用,因?yàn)?strong>CPU密集型應(yīng)用如果有長(zhǎng)時(shí)間的運(yùn)算,不如大循環(huán),將會(huì)導(dǎo)致CPU時(shí)間片不能釋放,使得后續(xù)的IO操作全部暫停。

而且Node只支持單核CPU,不能充分利用CPU資源.
可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,將會(huì)導(dǎo)致整個(gè)系統(tǒng)都崩潰,原因就在于Node是使用單進(jìn)程。
Node的開(kāi)源組件庫(kù)質(zhì)量參差不齊,更新快,而且不向下兼容。

其實(shí)Node.js作為后端能實(shí)現(xiàn)幾乎所有應(yīng)用,只是我們選擇的時(shí)候考慮更多的是這個(gè)應(yīng)用選擇Node.js是不是最適合的。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
為什么我這個(gè) Java 死忠倒向了 Node.js?
從Sun離職后,我“拋棄”了Java,擁抱JavaScript和Node
千萬(wàn)不要得罪程序員,復(fù)仇方式非常狠,11行代碼讓你懷疑人生!
bower 和 npm 的區(qū)別詳細(xì)介紹
交你如何進(jìn)行前端學(xué)習(xí)?
【全文】狼叔:如何正確的學(xué)習(xí)Node.js
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服