驳PHP优于Node.js的五大理由
发布于 2年前 作者 axelzhu 9553 次浏览

驳PHP优于Node.js的五大理由 当搜索Node.js与PHP比较时,总能找到Jani Hartikainen写的PHP优于Node.js的五大理由,这也让勇于挑战新事物新技术的同学犹豫不前,这里也让多年在WEB领域耕耘的码农谈谈不同看法。

  1. 容易托管 我想作者肯定指的是空间吧?那是上个世纪的事物了吧。现在是什么?小的说是平台,大的说是云计算。 是的,2003年我用asp写网站的时候,对于我而言服务器,内存是极其昂贵的,那个时候一定需要服务器空间需要FTP软件,做一个asp(2003更多的是asp空间商吧!)网站,通过FTP上传,现在还有做网站上传空间吗,现在几乎都是云平台,服务器租赁,至少也是虚拟空间,
  2. PHP在服务器上安装更方便、简易 很多同学都在问node.js在服务器怎么启动?为什么?因为node.js 相对于php的启动太简单了,甚至简单到不可想象,只需要一个node app.js(入口文件)就可以,而php需要选择哪一个http服务器,当然你可以选择php的黄金搭档apache,如果不是默认的配置,你对apache的了解又有多少,又有多少php程序员知不知道php依赖于fastcgi,一个服务器的配置对于开多少fagcgi进程是合理的?
  3. 如果PHP代码损坏,不会拖垮整个服务器,4. PHP进程短暂 这两点我要放在一起说,为什么?因为这正是node.js最大的优势。 坦率地讲PHP与node.js根本没有比较性而言,争的是什么?是HTTP SERVER之争。PHP的黄金搭档是apache?不,还少一个FastCgi,node.js和php的比较,是node.js与php+apache+fastcgi的比较,简单地讲FastCgi就是多线程的Cgi(当然有线程池),当每一个PHP请求,都会产生一个新的线程,每个线程都是独立的,线程不会影响另外的线程,那么这就形成PHP的两个特点,相对的稳定,相对的并发。为什么是相对的稳定和相对的并发?相对的稳定的是一个进程的崩溃不会影响另外一个进程(因为肯定是一个请求的代码出现问题造成的崩溃,但一个崩溃不影响其它我们就可以视而不见?),相对的并发是如果一个服务器可以开250个线程,再加上线程池就可以保证一定的并发量。 但是,线程是什么?是OS执行的最小单元,由线程ID,当前指令指针(PC),寄存器集合和堆栈组成(是不是专业的都要背?),然而线程是昂贵的,线程对cpu和内存的占用都是很重的,就象一个人跑步一样,你加速了,停下,启动再加速,那是很费力的。这就使得HTTP SERVER的后起之秀nginx以光的速度蔓延开来,nginx就是以单线程为基础的,为什么nginx快?WEB的世界是可以通过木桶效应来论述,也就是一次请求最短的木板就是瓶颈,很多人认为运算处理会阻塞主线程,这是需要由测试和经验来决定的,事实是它的处理时间占用很短,做100万次for循环要比一次网络访问的时间还要短,这些操作包括网络访问,I/O操作,数据库访问。nginx进程模型是所有需要阻塞请求的部分全部由epool(事件通知接口)触发相应事件,非阻塞(处理耗时 很短)部分用主线程一直执行,直到遇到阻塞部分就停止,交由阻塞部分监听异步完成事件,这样就构成了事件驱动模型。这部分可以研究一下nginx进程就可以得知。 说到这里,大家是不是觉得node.js与nginx进程模型很象,是的!这就是node.js创始人Ryan Dahl的初衷,单线程,事件模型。 node.js就是基于单线程和事件模块,这也恰恰是javascript特性(所以最终Ryan Dahl选择javascript是必然),node.js的单线程就是主线程,主线程是什么?就是事件队列,node.js(javascript)就是面向事件驱动的编程,web是事件化的,os也是事件化的。os的服务(I/O,database)都是在自己独立的进程中完成,当发生一个请求后,node.js只是在这个事件队列中注册一个事件,然后就不管了,具体这个事件的执行就交给了os(i/o,database)不同的进程,等os完成后,通过回调(node.js会轮询)再回到主线程的处理,所以node.js单线程是指自己的主线程,而不是所有的操作都是在这个线程里,这个线程只是事件调度,事件的执行都是交给操作系统在其它的线程中完成。所以node.js是非I/O阻塞,而不是非cpu阻塞,那么node.js会出现cpu阻塞,是不是性能就会有问题呢?不是的,就象Nginx一样,因为对web而言运算是非常非常小的,一次I/O的操作的时间远大于你做百万次的for循环。 5.更大的标准库 没有选择是最容易的,就以前我一直用微软的工具一样。其实对于库而言,应该是一些重要的库是不是还在更新和进步,至少在node.js发展了这么多年,对我而言对重要的web所必要的模块已经足够强壮。

另外补充: javascript 天时,地利,人和!javascript的出现就是天时,javascript就是为web而生,javascript就是因为web而不断成熟,看语言的排名,一切都是浮云,武功最高的境界就是无剑胜有剑,所有的c#,java php程序肯定都用过javascript吧,但真正对javascript了解又有多少?只是把javascript当作效果工具了吧? 回调 回调真的恶心吗?当你真的理解事件驱动的时候,你会发现回归才是编程的本质,一切的结束都是回归,而不是强求!

41 回复

这个要顶!分析得很透彻

读了 对理解Node.js有帮助 谢谢lz

更加深刻地了解线程了

《PHP优于Node.js的五大理由》很明显的,原文作者就是在扯蛋。 PHP没他说的那么好,Node.js也没他说的那差。 各有千秋。

PHP <==> 拍簧片

其实吧,各有各的优势。php也不是吹牛吹出来的,也是相当强悍,代表了那个年代甚至以后很长时间内最优秀的网站后端编程工具。Node.js流行起来,当然有它的原因,但我觉得它本身与php根本不呛行,只有一小部分功能重叠而已。Node.js和Win上的iocp是相似的概念,现阶段php还是不可能被替代的。

这篇文章必须顶啊,node目前需要的就是时间。

顶一个!~

是的! 对于node.js的推广本质上还是看公司行为,往往都是公司在主导项目所用平台选型,然后程序员跟进,所以凡是新的技术更多会被一些新型公司更快的采纳。

本人出身php,也做java之类的web项目。现在也在接触node.js,感觉node.js确实不错,原则理论上讲完全可以替代php,但实际上要在web开发占主流还需要很长的路要走。

这么争论毫无意义的,存在即合理。

@EchoFUN ASP也存在了很长时间

可能由于还不太熟悉node的缘故,感觉调试方法比较少。其他方面感觉很不错,希望可以在更多的生产环境中看到node的身影

作为一名前端开发者,必须要顶下

一点都没驳到点子上。 说明你对nodejs也就是仅知其毛皮而已。

写的不错!赞

我跟你基本类似。不过我对前端可能也了解比较多。基本就是full stack programmer。。 然后我现在完全用nodejs,javascript了。前端用angularjs后端用nodejs。现在自己摸索nodejs的架构中。。。 我认为对于我来说,nodejs已经是我的主流的了。

js基于组合而非继承 + 事件驱动 + 函数式 + 泛型 + 正则,确实不一般啊

o(︶︿︶)o 唉,又见这种对比,完全没啥意义,存在即是道理,各有各的用处,何必非要争个高下

应该有ruby代替php,哈哈

顶!小菜鸟膜拜大神

有自己的见解, 但并不深刻 忽悠诸如ls的一些高喊大神顶牛的人还行

这种问题好蛋疼,技术选型很多时候其实是和受业务影响的

我从PHP转到nodejs的主要原因是统一语法, 前端javascript, 后端nodejs, DB是mongoDB. 没考虑合适不合适.

开发一个强悍版本:china.js

把PHP和node比,还真是不自量力。。lz还花这么多时间写篇文章- -

好用出贞操。

技术都是服务与业务的
没有好坏优劣
只有适用与否而已吧

node.js 不可能代替PHP.

node内存太小是个软肋。虽然可以通过参数配置或者修改源码。

等我们游戏项目出来后,希望能在推动nodejs的发展道路上起到一臂之力

回到顶部