快:這個快有兩方面,第壹是V8引擎快,第二是異步執行,Node.js
功能上是壹個基於V8引擎的異步網絡和IO Library,和Python的Twisted很像,不同的是Node.js的event
loop是很底層的深入在語言中的,可以想象成整個文件在執行的時候就在壹個很大的event loop裏;
npm:npm可以說是用起來最順手的package management了,npm作為Node.js的官方package management,匯集了整個社區最集中的資源;不像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的主流ORM
SQLalchemy也很成熟。
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,比如壹個chat room,那麽Node.js實現更容易。這兩個應用場景還是有差別的。
來源於知乎:/question/20961574