node.js為什麼不用coroutine

  • 作者:由 匿名使用者 發表于 繪畫
  • 2021-09-11

node.js為什麼不用coroutine北京巴卜技術有限公司 2017-11-08

Disclaimer:以下對比可能有強烈的個人色彩Node。js>Python的地方快:這個快有兩方面,第一是V8引擎快,在V8引擎背後操刀的是LarsBak大神,他創造過高效能SmallTalk引擎和JavaHotspot引擎(現在Java的預設VM),他帶領下的V8引擎讓Javascript速度達到了一個新的階段。第二是非同步執行,Node。js功能上是一個基於V8引擎的非同步網路和IOLibrary,和Python的Twisted很像,不同的是Node。js的eventloop是很底層的深入在語言中的,可以想象成整個檔案在執行的時候就在一個很大的eventloop裡。npm:npm可以說是用起來最順手的packagemanagement了,npm作為Node。js的官方packagemanagement,彙集了整個社群最集中的資源。不像Python經歷過easy_install和pip,還有2to3的問題。Windows支援:Node。js有微軟的加持,Windows基本被視為一等公民來支援,libuv已經可以很好的做到統一跨平臺的API;而Python雖然也對Windows有官方的支援,但是總感覺是二等公民,時不時出些問題。Python>Node。js的地方語言:就單純從語言的角度來說,Python寫起來要比Javascript舒服很多。Javascript設計本身有許多缺陷,畢竟當時設計的時候只是作為在瀏覽器中做一些簡單任務的script,所以程式碼一旦龐大,維護還是有困難(不過Node。js的module很大的改善了這個問題)。不過用Coffeescript可以很大的改善Javascript,幾乎可以和Python等同。成熟:成熟包括語言本身已經成熟,還有Framework和ecosystem也很龐大。Node。js的絕大多數framework都很新,有的API一直在變,有的感覺已經不在維護,總之沒有一個像Django那種百足之蟲感覺的framework。Python的主流ORMSQLalchemy也很成熟。Python和Node。js很難分高下的地方非同步Style:Node。js的非同步Style是CPS,也就是層層callback,基於event,和瀏覽器中的Javascript很像。CPS好處是讓熟悉瀏覽器Javascript的人能很快上手,學習難度也不大。缺點是邏輯一複雜,就變得很難維護,基本上需要透過async。js這種library,或者用promise。Python的非同步除了和Node。js很像的Twisted之外,也有基於coroutine的gevent,coroutine讓非同步程式碼維護起來更容易,不過學習曲線陡。應用場景:如果是一個CRUD的app,那麼想都不想直接是Python,Node。js本身不擅長CRUD的app(絕大多數Node。js都是直接裸在外面的,而不是有一個Nginx在前面,否則websocket就不能用了,不過新版nginx開始支援websocket),程式碼又不好維護,而Python的WSGI很適合,成熟的stack也有很多。如果更偏向於real-time,比如一個chatroom,那麼Node。js實現更容易。這兩個應用場景還是有差別的。

Top