快:这个快有两方面,第一是V8引擎快,在V8引擎背后 *** 刀的是Lars Bak大神,他创造过高性能SmallTalk引擎和Java Hotspot引擎(现在Java的默认VM),他带领下的V8引擎让Javascript速度达到了一个新的阶段。第二是异步执行,Nodejs功能上是一个基于V8引擎的异步网络和IO Library,和Python的Twisted很像,不同的是Nodejs的event loop是很底层的深入在语言中的,可以想象成整个文件在执行的时候就在一个很大的event loop里。
npm:npm可以说是用起来最顺手的package management了,npm作为Nodejs的官方package management,汇集了整个社区最集中的资源。不像Python经历过easy_install和pip,还有2to3的问题。
Windows支持:Nodejs有微软的加持,Windows基本被视为一等公民来支持,libuv已经可以很好的做到统一跨平台的API;而Python虽然也对Windows有官方的支持,但是总感觉是二等公民,时不时出些问题。
Python > Nodejs 的地方
语言:就单纯从语言的角度来说,Python写起来要比Javascript舒服很多。Javascript设计本身有许多缺陷,毕竟当时设计的时候只是作为在浏览器中做一些简单任务的script,所以代码一旦庞大,维护还是有困难(不过Nodejs的module很大的改善了这个问题)。不过用Coffeescript可以很大的改善Javascript,几乎可以和Python等同。
成熟:成熟包括语言本身已经成熟,还有Framework和ecosystem也很庞大。Nodejs的绝大多数framework都很新,有的API一直在变,有的感觉已经不在维护,总之没有一个像Django那种百足之虫感觉的framework。Python的主流ORM SQLalchemy也很成熟。
Python 和 Nodejs 很难分高下的地方
异步Style:Nodejs的异步Style是CPS,也就是层层callback,基于event,和浏览器中的Javascript很像。CPS好处是让熟悉浏览器Javascript的人能很快上手,学难度也不大。缺点是逻辑一复杂,就变得很难维护,基本上需要通过asyncjs这种library,或者用promise。Python的异步除了和Nodejs很像的Twisted之外,也有基于coroutine的gevent,coroutine让异步代码维护起来更容易,不过学曲线陡。
应用场景:如果是一个CRUD的app,那么想都不想直接是Python,Nodejs本身不擅长CRUD的app(绝大多数Nodejs都是直接裸在外面的,而不是有一个Nginx在前面,否则websocket就不能用了,不过新版nginx开始支持websocket),代码又不好维护,而Python的WSGI很适合,成熟的stack也有很多。如果更偏向于real-time,比如一个chat room,那么Nodejs实现更容易。这两个应用场景还是有差别的。两个语言要占用多 CPU 的方法差不多,都是开多进程。Python 虽然「支持线程」但基本没什么用处。
所以,选择的条件无非是:
团队成员普遍熟悉什么:熟悉 jQuery *** 作 DOM 的不纳入考虑范围。
有什么依赖的库,比如是不是还有 WS 之外的部分基于 Python 写了?
如果两条都没有严重偏向 JavaScript(比如队伍里有 Nodejs 大牛且项目已经有不少东西基于 Nodejs 构建了)的话,选 Python。虽然 Python 这个语言 设计一般,还有 2/3 不兼容问题,但怎么说……都比 JavaScript 这种东西稍微适合人类使用那么一点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)