关于 Node.js: 所有PHP开发人员应该知道的5点

虫虫
 虫虫
发布于 2012年02月07日
收藏 38

我最近开始和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。它很简单,很有用。

 

英文原文,OSChina编译

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:关于 Node.js: 所有PHP开发人员应该知道的5点
加载中

最新评论(26

woquanke
woquanke

引用来自“爱国者”的评论

引用来自“codehive”的评论

小心使用node.js!!!玩玩helloword很爽
异步编程模型的侵入非常之大
Debug的苦难度不是一般

继续等待,不敢用到生产

侵入性非常大?怎么说?

不过我认为大量的异步代码会带来调试和维护的噩梦
把日志写好的话,调试会少很多
nobody1986
nobody1986
node.js基于事件和异步io的设计不错,而且性能也比较高。
但是开发的编码过程和一般人的习惯不同,更可怕的是,代码量大的时候,全部基于回调的代码会很难以维护。
chuangyu
chuangyu
个人觉得这个只是让熟悉js的人不需要重新学习别的语言就能开发服务端程序,就象很多java框架的目的是为了让java开发者快速开发web应用一样。所 如果你已经掌握并熟悉一种服务端开发语言的话,大可不必急着去弄node.js。 基于学习目的的另当别论。
justintung
justintung

引用来自“爱国者”的评论

引用来自“滔哥”的评论

我完全不知道 node.js 什么东西..

那你就落伍了

为什么落伍啊,需要用到的时候再学也不迟啊
mj4738
mj4738

引用来自“libinqq”的评论

nodejs 对我来说,目前唯一的缺点,也是最大的缺点,对数据库不友好的支持很差, 官方给的那个mysql 接口过于简单,速度慢的跟php没的比,也有很多大牛给它写了mysql插件,虽然比官方的丰富很多快很多,但是仍然和php有差距, 什么时候对数据库支持友好了,速度差不多了,才是node.js的春天,现在也就看看图个新鲜。

Node.js + NoSQL 如何?
mj4738
mj4738

引用来自“滔哥”的评论

我完全不知道 node.js 什么东西..

那你就落伍了
mj4738
mj4738

引用来自“codehive”的评论

小心使用node.js!!!玩玩helloword很爽
异步编程模型的侵入非常之大
Debug的苦难度不是一般

继续等待,不敢用到生产

侵入性非常大?怎么说?

不过我认为大量的异步代码会带来调试和维护的噩梦
mj4738
mj4738

引用来自“Liuxd”的评论

引用来自“Raymin”的评论

动态页面可否由后台渲染全面转为 ajax 实现。

这种趋势似乎越发的明显了...

不懂,求解释
libinqq
libinqq
nodejs 对我来说,目前唯一的缺点,也是最大的缺点,对数据库不友好的支持很差, 官方给的那个mysql 接口过于简单,速度慢的跟php没的比,也有很多大牛给它写了mysql插件,虽然比官方的丰富很多快很多,但是仍然和php有差距, 什么时候对数据库支持友好了,速度差不多了,才是node.js的春天,现在也就看看图个新鲜。
foxidea
foxidea
我蛮喜欢js 巴不得,后台语言用 js 来实现,前段时间用 js 写 asp,但是没有一个好用的 ide 效率也太差,就放弃使用了,还是用了C#

node.js 看过一个聊天室程序,就是 变量可以全局访问,变量类似于 .net 中的application 感觉,做聊天室 很好
返回顶部
顶部