用了一年多 Node.js, 如今已是 Node.js 的脑残粉了,这篇日志比较杂,算是我对 Node.js 方方面面的一个集中吐槽。前端
首先是性能,用起来感受 Node.js 的性能并无想象中那么好。内存占用差很少和 Ruby 一个等级,比 Python, PHP 要多。计算性能(即 CPU 使用)上,纯计算并无太大优点,但由于能够很好地控制异步流程,因此整体表现上来看性能要比 PHP 好不少。我的以为 Node.js 在性能方面是有很大的潜力的,由于有不少大的项目在致力于提升 JavaScript 虚拟机的性能——好比各大浏览器;同时 JavaScript 是一个语法简单的语言,也是一个开放标准,不像 Python 和 PHP 同样由于顾及兼容性,很难进行大的重构来改善性能。node
而后是包管理器和库,Node.js 内置了 npm, 由于 npm 是个很是好用的包管理器,由于 JavaScript 的编写门槛低,由于 JavaScript 原本就有不少优秀的前端库被移植到了后端,因此 NPM 上的包如今已经多于 PyPI 和 RubyGems 了,而后远超 PEAR 和 Composer. Node.js 的开发中不一样于 PHP 的一点就是你们都不怕加依赖,每一个小需求都去 NPM 上找已有的库来实现——并且每每都能找到。因此 Node.js 的开发基本上就是在组合依赖,而后倾向于把一个即便很小的独立需求写成一个库,这却是和 UNIX 的思路比较像。再另外一方面,Node.js 社区对开源十分友好,这里的友好是指大多数的库都是在 Github 上开放开发的,并且使用的是很是宽松的协议,例如 MIT, 不像 GPL 那么具备「攻击性」。git
社区,Node.js 的应用大部分仍是 Web 后端,而 Web 后端相关的库基本都是那么几个大牛搞起来的,例如 express, jshttp, jade, mocha 和 koa 就是以 TJ 大神为首的四五我的开发起来的,这却是个有趣的现象。——虽然 TJ 大神最后决定淡出 Node.js 社区。github
工具链,Node.js 比较年轻,不少好用的工具都是近两年刚刚出现的,例如预编译方言, 单元测试和模拟测试,构建工具等;不敢说有多好,可是要比 PHP 好很是多。至于缘由,首先很大程度是由于这些库都是既可用于前端又可用于后端的,由于 Web 前端的硬需求,让 Node.js 顺便得益;而后就是由于 JavaScript 灵活而简单的语法,让这些工具能够以一些很是巧妙而优雅的方式来实现。至于 IDE, 依然得益于 Web 前端,仍是有一些 IDE 可用的——虽然 JavaScript 语言自己不是很利于静态分析。web
语法,我还要再强调一下 JavaScript 的语法简单而灵活,其中重要的一点是 JSON, JSON 几乎是目前 Web 领域最通用的数据格式,而在 JavaScript 对 JSON 具备原生的支持!JavaScript 中全部的数据结构都是围绕着 JSON 的一个超集——Object 展开的,包括数组,函数,对象和类。固然这样也带来一个麻烦,就是由于写起来限制少,致使不知道该怎么写,刚开始学习的时候总免不了反复重构,才能摸清各类设计模式在不一样状况下的优劣,找到适合本身和适合具体项目的写法,因此能够说 Node.js 入门简单,但要构建大型项目,仍是比较考验开发者的功力的。由于历史遗留问题,JavaScript 的语法算不上优美,不过还好咱们有各类预编译方言,好比 Coffee Script, TypeScript, Dart, LiveScript 以及 ClojureScript, 总有一款适合你。express
使用场景,JavaScript 是一个通用的编程语言,Web 先后端天然没必要说,来看看其余方面。我的觉得 Node.js 仍是很适合用来编写服务器工具的,或称运维工具,由于运维中不少状况是能够异步工做的,JavaScript 又有比较不错的正则支持,替代 bash 和 Python 也问题不大;Node.js 只需装好解释器,就能够随便用,不用畏手畏脚地避免引入依赖。而桌面和移动设备编程,Node.js 有 node-webkit 以及其余各类外壳,虽然目前使用体验不是很好,可是能够很是显著地下降开发成本,轻松跨平台,想必前途也是光明的。npm
最后说学习 Node.js, 在我看来,学习 Node.js 分两点,一是要理清 Node.js 的「基于事件回调的异步 IO」,这是 Node.js 与其余主流编程语言最不一样的一点。而后第二步就是把 NPM 上 Top 100 的库都看一下,不用细看,只要混个脸熟,知道每一个库是干吗的就好了。完成这两步,那么恭喜你,已是一个 Node.js 开发者了。编程