驳PHP优于Node.js的五大理由 当搜索Node.js与PHP比较时,总能找到Jani Hartikainen写的PHP优于Node.js的五大理由,这也让勇于挑战新事物新技术的同学犹豫不前,这里也让多年在WEB领域耕耘的码农谈谈不同看法。
- 容易托管 我想作者肯定指的是空间吧?那是上个世纪的事物了吧。现在是什么?小的说是平台,大的说是云计算。 是的,2003年我用asp写网站的时候,对于我而言服务器,内存是极其昂贵的,那个时候一定需要服务器空间需要FTP软件,做一个asp(2003更多的是asp空间商吧!)网站,通过FTP上传,现在还有做网站上传空间吗,现在几乎都是云平台,服务器租赁,至少也是虚拟空间,
- PHP在服务器上安装更方便、简易 很多同学都在问node.js在服务器怎么启动?为什么?因为node.js 相对于php的启动太简单了,甚至简单到不可想象,只需要一个node app.js(入口文件)就可以,而php需要选择哪一个http服务器,当然你可以选择php的黄金搭档apache,如果不是默认的配置,你对apache的了解又有多少,又有多少php程序员知不知道php依赖于fastcgi,一个服务器的配置对于开多少fagcgi进程是合理的?
- 如果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当作效果工具了吧? 回调 回调真的恶心吗?当你真的理解事件驱动的时候,你会发现回归才是编程的本质,一切的结束都是回归,而不是强求!
+1
牛,顶
+1
支持
这个要顶!分析得很透彻
+1
读了 对理解Node.js有帮助 谢谢lz
更加深刻地了解线程了
《PHP优于Node.js的五大理由》很明显的,原文作者就是在扯蛋。 PHP没他说的那么好,Node.js也没他说的那差。 各有千秋。
PHP <==> 拍簧片
其实吧,各有各的优势。php也不是吹牛吹出来的,也是相当强悍,代表了那个年代甚至以后很长时间内最优秀的网站后端编程工具。Node.js流行起来,当然有它的原因,但我觉得它本身与php根本不呛行,只有一小部分功能重叠而已。Node.js和Win上的iocp是相似的概念,现阶段php还是不可能被替代的。
这篇文章必须顶啊,node目前需要的就是时间。
顶一个!~
up
+1
是的! 对于node.js的推广本质上还是看公司行为,往往都是公司在主导项目所用平台选型,然后程序员跟进,所以凡是新的技术更多会被一些新型公司更快的采纳。
本人出身php,也做java之类的web项目。现在也在接触node.js,感觉node.js确实不错,原则理论上讲完全可以替代php,但实际上要在web开发占主流还需要很长的路要走。
这么争论毫无意义的,存在即合理。
yeah
+1
@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
-1
把PHP和node比,还真是不自量力。。lz还花这么多时间写篇文章- -
好用出贞操。
技术都是服务与业务的<br> 没有好坏优劣<br> 只有适用与否而已吧<br>
node.js 不可能代替PHP.
node内存太小是个软肋。虽然可以通过参数配置或者修改源码。
等我们游戏项目出来后,希望能在推动nodejs的发展道路上起到一臂之力
mark
厉害~
回调挺好,但是层次如果太多,会有很多坑的
@shmnh 默认内存多少?
需求驱动技术,ps:PHP是最好好的语言:)
楼主就不要太极端了。。。每种语言都有自己的使用场景和优势。Nodejs 在写大型网站或者产品的时候,其劣势必现, 难以维护的代码,复杂业务即使有Promise同样写的很痛苦。
楼主可曾站在更高一个层面想问题? nodejs的好程序猿有多少?价格是多少?同样一件事用php的程序猿成本是多少?你语言再有优势又怎样,成本摆在那啊~风控考虑过嘛?我花2w月薪请一个noder 他跑了我没人干活了,客户流失了,损失是多少,1w请俩phper,跑了一个还能容我再招一个 1 + 1 > 2 we are more than programmer
都是程序狗有什么好争的
@CarlosRen 也不能这样说,node或者前后端都包了。1W请2个,你1W请2个phper还要请前端。
php一直是最好的语言…
@coolicer 一个工作需要1个月前端 + 1个月后台 nodejs月薪2w 成本是 2w * 2 = 4w 我两个phper 一个月是1w * 2 = 2w 只要我纯前端少于2w月薪 我不管是时间上 1个月并行开发 还是成本上都少于noder开发 这就是所谓的三个臭皮匠顶一个诸葛亮,而且建议您看看亚当斯密的国富论,第一张的论分工就已经很明确了细化分工的好处, nodejs的优势在于统一前后端,以一个整体的思路去开发,减少了开发过程中的前后端工程师交流的内损 但是有大型开发,我相信还是会按页面分工 而且就支持来说,nodejs支持相当少,未知问题谁来填坑?
利立浦特人写下《吃鸡蛋从大头敲开优于从小头敲开的五大理由》 不来夫斯库人回应《驳吃鸡蛋从大头敲开优于从小头敲开的五大理由》
@CarlosRen 软件工程领域《人件》和《人月工程》可比《国富论》有说服力多了。Good Luck, boy.
@CarlosRen 有问题来这里求助,呵呵~ 主要是因为技术比较新而已,如果趋向成熟,PHP 会在 Web 开发领域完全没有地位,比如后端数据处理,Python 比 PHP 强,前端处理互动能力 Node.js 比 PHP 强,那么 PHP 在 Web 项目中未来怎么定位呢?目前只是吃老本状态~