关于 Node.js: 所有PHP开发人员应该知道的5点
我最近开始和Node.js打交道。以前做PHP开发,特别是Drupal,我发现向Node.js转移很容易,而且过程很愉快!但是我也需要学会从一些不同的角度思考。下面我列出了5项我认为PHP工程师应该知道的Node.js特点。
1. Node.js 是构建于Chrome的JavaScript引擎的
Google的浏览器Chrome,有一个非常快速的JavaScript引擎,叫做V8。这个JS引擎可以被独立出来。Node.js就是建立在V8之上的。这也是为什么Node.js会运行的如此之快。对于开发者来说,有几个好处:
- 你不需要重新学习一门新的语言,它就是JS。我常常查看Chrome和Mozilla的JS文档,他们完全通用。
- 受益于V8的 JIT (Just In Time)编译功能,Node.js 的应用的运行速度可以和本地代码媲美。对比测试标明,Node.js 要比 PHP 和Ruby 快很多。
- 随着V8的进步,Node.js 将同时受益。
2. Node.js 不仅仅是一个网页服务器或者平台
和PHP不同,Node.js 不是以网页为中心的。Node.js 是通用目的的JS运行时,带有很多功能强大的库。其中有一个库提供了 HTTP/HTTPS 的实现。
你可以用Node.js做很多事情。你可以很容易的利用它来创建一个命令行程序或者其他TCP/IP服务。
3. Node.js 是面向对象的 (虽然比较奇怪)
我喜欢jQuery。但是它让我变懒,写了很多简单、快速但是很难看毫无架构可言的脚本。这并不是什么坏事,因为处理简单的网页行为,这足够了。但是Node.js不是仅仅用来处理浏览器上面的事情的,它是可以用来构建应用程序的,也就是你必须考虑程序架构。当你用Node.js写代码的时候,你将深入到JS的对象模型中。我曾经很讨厌JS的对象模型,常常把我搞疯掉。但是Node.js和NPM(Node Package Manager)很好的利用了JS的原型系统,帮助我清楚了很多类/接口使用中的障碍,让我爱上了面向对象的JS编程。
4. 基于事件的 I/O
这是Node.js最有争议的一点。Node自身在一个线程中运行。是的,只有一个!你可以和传统的 Apache/PHP 的一堆实例对比一下。但是Node运行的很快速,很高效。
这是怎么做到的?共享执行时间,把密集的IP处理放到别的线程处理。对于这一点的优点与缺点我可以写很长的文字来讨论,但这里我想说点实际的:当你用Node.js写代码的时候,你需要考虑你的任务是否是慢的,或者I/O密集型的。使用异步的方法来处理回调或者使用事件处理器来处理执行慢的工作。
最主要的是,你要保证代码不让一个请求占据Node主线程太长事件,并且不给其他请求处理的机会。
5. 必须使用包管理!
老实说,你喜欢PEAR吗?你是不是把你大部分的代码都转换成PEAR或者PECL包了?并没有很多PHP程序员这么做,甚至很多人并不知道PEAR的存在。在Node.js的世界里,你必须把代码打包:
- Node.js的设计就是一个最精简的框架。PHP核心的90%的东西都不会在Node.js核心中出现。例如,数据库驱动、邮件发送库、HTML支持等等,都不在核心库中。
- Node.js的核心就是一个模块化的框架。你会发现它很好用!
- NPM(Node Package Manager)是你必备的工具。有了它,你就可以下载Node.js的各种代码包,驱动,解析器,编辑器,服务器等等。
- 创建并且发布你的代码包是很简单的。我在使用Node工作不久就发布了我的第一个代码包。
如果你是一个Drupal开发者,你会觉得Node的包管理系统有点像Drupal的模块,不同的是你现在面对的开发者,不是建站者。
结论:问问你的医生,Node.js是否合适你
我提到了很多PHP开发者应该知道的,Node.js的特点。互联网上有成千上万关于Node.js的文章,大部分是正面的。Node是一个有趣的产品,它有一个优雅的架构。但是Node并不是万能药。我并不认为Node能够马上替代PHP。我只是认为PHP开发者都应该学习一下Node.js。它很简单,很有用。