在SitePoint最近一篇PHPvsNode.jsSmackdown文章中,CraigBuckler比较了这两种语言如何应对一系列10个挑战,以确定哪一个总体上更好。正如克雷格在书中指出的那样,这些比较总是有些矛盾。作为一个有趣的后续行动,我们请Bruno?kvorc(SitePoint的PHP开发人员)和JamesHibbard(SitePoint的JavaScript开发人员)提供每一轮的评论。下面是它们的细节……第1轮:开始第1轮挑战在于了解您可以多快地用每种语言构建一个“HelloWorld”页面。这包括设置服务器环境所需的时间。PHP赢得了这一轮,部分原因是这种语言“在概念上更简单”并且“对新开发人员的威胁较小”,Craig估计。Bruno:PHP赢得“开始”回合纯粹是因为更多的主机支持该语言,因此入门很容易。这很容易使用,无需做任何额外的事情。如果更多主机忽略使用Node命令行并使用控制面板上的简单“重新加载应用程序”键直接进行文件上传,那么两者将是相同的。然而,就在屏幕上显示内容的实际语法而言,PHP更简单——尤其是对于那些没有编程经验的人。James:在本地机器上开发时,我看不出两者有什么大的区别。要在浏览器中运行PHP脚本,您需要安装一些服务器软件;运行Node脚本,需要安装Node,最后安装express等web框架。然而,正如Craig所说,PHP“在概念上更简单”。Node的进入门槛更高。这一点没有争议。第二轮:帮助和支持第二轮考虑的是获得两种语言的帮助和支持的难易程度。PHP赢得了这一轮,主要是因为它存在的时间更长。布鲁诺:对此保持沉默。詹姆斯:我同意这种说法。Node是一项新技术,所以目前,帮助会比较少。但是当Node越来越成熟的时候,这方面就不是问题了。第三轮:语法第三轮比较两种语言的语法理解难度。Craig判断Node赢得了这一轮。布鲁诺:我非常不同意这种观点。PHP的语法中确实存在一些怪癖,其中许多已得到修复,还有许多将在新版本中删除。另一方面,JS中也存在“this”的问题~关于第3条(开发时,使用js时不需要切换客户端开发和服务端开发),我不同意这个概念。服务端环境和客户端开发环境完全脱节,还需要大脑中的一个开关。总有一些新语法不能在浏览器中使用,反之亦然,所以这也是一种语言转换。Bullet4(了解JS让你更想用它)这是我很赞同的一点。我在工作中使用JS和PHP多年,JS甚至更长,但我不太喜欢它——尽管那纯粹是个人喜好。詹姆斯:我喜欢JavaScript。我知道它有它的怪癖,而且我知道出于某种原因,ECMAScript2015将彻底改变并为该语言带来一些令人兴奋的新功能。JavaScript强大而灵活,可以适应多种不同的编程风格。与PHP相比,我喜欢使用JavaScript。节点(Node.js)就是其中之一。第四轮:开发工具第四轮:从这两种技术使用的开发工具来看,由于开发工具npm,Node略胜一筹。Bruno:虽然,开发者最初是受到npm的启发,但现在有了比npm使用起来更舒服的飞跃,如果你的电脑上安装了同一个库的两个版本,飞跃不会让你系统分解。而且相对于npm,leapsandbounds让设计者可以使用递归思维,而递归思维是如此重要,以至于当开发者准备着手构建包管理器时,这是首先要考虑的。npm还有一个致命的缺点,我称之为“开发者协作性和友好性”。Npm不能很好地做到这一点。对于npm,只有开发者自己才能看懂他们写的东西。***,npm与Vagrant的兼容性不好,直接阻碍了你开始自己的工作,更何况npm不关注用户的需求。npm有一个多年来一直存在的错误,导致该软件在Windows上基本上无法使用,这可不是一件容易的事。当然PHP也有很多愚蠢的错误,但是这些错误不会导致你的系统出现问题。的确,PHP没有附带编译器,但我认为不应该。这种便利不应由包管理器或单独的应用程序来完成。如果将来有一天,有人为Node开发了一个很好的包管理器,那么用现有的编译器替换它将会变得异常困难。使其相对独立,人们可以方便地切换。另外,安装它只需要在终端输入一行代码,或者下载一个安装程序。书中提到的编译器影响很小的说法是一个明显的错误。自PHP开发以来,编译器影响了每一位新的PHP开发人员,其中一些最优秀的开发人员不得不将其添加到他们现有的管道中。仅仅因为在编译器出现之前有很多PHP用户并不意味着它的用处不大。事实上,它自诞生以来就产生了巨大的影响。一些人所谓“对社会影响不大”的说法根本没有事实根据。现在,我不能说大多数PHP开发人员都想安装Node,这是事实。遗憾的是,很多好的工具都是先在Node下开发的,但我还是希望像Node-free开发环境一样,也可以用来开发BowerPHP。James:我很高兴有人加入了Node。我爱npm。它易于安装、易于使用,并且有数以千计的软件包可满足几乎任何需求。我还喜欢npm可以选择全局和本地包这一事实(与某些语言相比,例如Ruby,其标准要求您的包与您的Ruby版本一起安装)。它的工具也很棒。一些工具,如Bower和Grunt,在我的工作流程中占有一席之地,它们提高了我的工作效率。另外值得一提的是,npm开发了版本3的测试版,解决了Bruno提到的很多问题,比如嵌套的node_modules方法错误等。以下引自整篇smackdown:PHP开发者不妨(或需要)安装在某些情况下使用Node.js。反之则不然。第5轮:环境第5轮是关于技术的可用性和部署,以及哪些平台和生态系统支持它们。Craig对此不是很清楚,但似乎更偏向于Node.js。Bruno:Craig说他比较了PHP和Nodeforweb(常见的web开发问题),然后说JS无处不在。首先,我们比较的是Node.js,而不是JS本身,其次,我们比较的是两种语言的工作方式。猴子比鱼好,因为鱼笨不会爬树,但猴子和鱼都会游泳。因此,让我们比较一下他们的表现。在Web开发环境中,PHP胜出。下面是一些基于PHP的桌面程序工具——是的,也许你不会使用它们,但你肯定会使用这些基于PHP的命令行程序。詹姆斯:克雷格和我再次同意。使Node.js如此受欢迎的一些特性(速度、可扩展性、与JSON的紧密连接、低资源占用)使其适用于许多其他类型的应用程序,例如功能强大的物联网设备。我想,谁不喜欢机器人呢?Node推动了NW.js(基于Chromium和Node.js的应用程序)等项目,它允许您使用HTML和JavaScript编写本机应用程序。多么激动人心!第6轮:集成第6轮我们看数据库和驱动程序集成,PHP获胜主要是因为它的年龄。Bruno:在整合方面,其实是打成平手。PHP有年龄的优势,可以有更多的选择,但也意味着要照顾很多过时的技术,比如mysql的扩展——我们可以升级到PHP7来摆脱它,但是已经很多年没用了使用。James:我当然同意这一点,尽管它看起来很模糊,而且我喜欢这个例子:“过时的,更流行的技术”。这也凸显了Node的一大优势——它原生支持JSON。JSON可能是网络上最重要的数据传输格式,也是最流行的NoSQL数据库的通用结构。在JavaScript程序中使用JSON非常容易,这意味着当你使用Node时,数据可以非常简洁地传输,无需格式转换。您只能使用一种语法(JSON格式)在浏览器、服务器和数据库之间传递。第7轮:托管和部署第7轮将研究将新应用程序部署到Web服务器的难易程度,在Craig看来,PHP是明显的赢家Bruno:同样,Bruno保持沉默。James:这是Node需要改进的地方。每个提供网络托管的公司都提供PHP和MySQL。如果你想看到输出,你只需要创建一个扩展名为“.php”的文件,在,上传它,然后使用浏览器访问它。但同样的方法不适用于Node。当然,Node托管有很多选择,但它们需要更多的设置和命令行访问,这对初学者来说可能是不愉快的。毫无疑问,本轮PHP赢了对手。第8轮:性能第8轮侧重于速度。虽然这通常取决于经验和开发团队的敬业程度,但Craig注意到了Node.js的一些优势。布鲁诺:错误比比皆是。首先,本文对性能进行了详细讨论,排除了开发者体验和应用程序类型对性能的影响。如果那篇文章仍然不能说服您断章取义地谈论性能是多么愚蠢,那么我的观点是:PHP正在嵌入一个多线程服务器。这使得完全绕过外部服务器成为可能,但目前不推荐使用。此外,还有一些速度超快的服务器(如Nginx),使得整个PHP的启动和分发请求的过程快得可以忽略不计。PHP的本地异步(非阻塞I/O)支持在PHP7中出现,而ReactPHP几年前就实现了类似的模式,所以它也没有意义。PHP单请求生命周期模型是一个巨大的负担。确实,如果单纯追求速度,这个还是可以很容易规避的,不仅可以通过Memcached和Craig提到的类似方法,还可以通过类似Ajax的方法。顺便说一句——服务器端JS应用程序默认也是单请求的。此外——这种单请求生命周期也是一个优势。每次请求都会重建应用,避免很多内存问题,清空垃圾内存,保持苗条干净。你最后一次拥有一个没有内存泄漏、前端或后端的稳定、长时间运行的Javascript应用程序是什么时候?性能讨论现在和将来都是平局(除非你使用Java,否则Java输了)James:Node以高性能、低延迟运行时而闻名,它找到了自己的代码嵌入方式一些财富500强公司的堆栈。得益于其非阻塞I/O机制和GoogleChromeV8引擎技术,Node现在已成为“快速”和“可扩展”的代名词。现在网络上流传着很多故事,比如Node如何让企业实现更好的性能提升,为开发者提供更高的生产力。我很高兴节点赢得了这一轮,但我知道有些人对此提出质疑。Round9:ProgrammerComplexRound9将看看Craig认为一般程序员对PHP和Node有多少感情。***他认为Node赢了。Bruno:Craig,你一定是看错地方了,PHP社区非常热情和活跃,每年举办超过20场会议和非常激动人心的主题。HHVM的PHP7就是这样搞的。另外,我想说我很好奇Node开发人员正在开发哪个版本(v0.12.5已经在编写中),即使经过6年的开发。它不成熟且危险(见鬼,你正在使用不稳定的技术,你是在故意扼杀你的业务),此外,它忽略了操作系统中的一些旧错误,这些错误会导致一些重要的开发人员离开该语言的生态系统。一些负面的经历让我不喜欢Node,主要是因为npm。这在未来可能会改变,但现在每次我使用Node时,我都会感到恐惧和失望。我们都有自己的偏好,但重要的是要保持客观并为工作选择合适的工具。但允许其他人尝试和犯错也很重要,因为每个人都是事后才想到的。所以不要听克雷格的,不要听吉姆的,也不要听我的。去做吧,看看什么有效,找到什么感觉好用,最后,让你觉得有效率的是最好的,而不是那些只是节省你一些加载时间的。James:Node很火。Node.js领域有很多创新。虽然激情并不客观,但我很高兴Node赢得了这一轮比赛。Round10:Ahead第十轮着眼于两种语言的前景,基于这两种语言在现阶段似乎都前景广阔的事实,Craig得出的结论是本轮的结果是平局。Bruno:Bruno必须抓紧时间写更多关于PHP的文章,并维护令人惊叹的SitePointPHP频道。James:James迫不及待地想回到他钟爱的JavaScript频道,但他带着这些要点离开了:本轮平局是公平的游戏。Node是一颗冉冉升起的新星,但如果他要推翻PHP的宝座,他还有很多工作要做。总的来说,如果锤子是你唯一的工具,那么每个问题看起来都像钉子。Node并不是完全适合所有的解决方案,当然很多情况下不使用Node也是非常合理的。但是,Node能做什么,它都能做得很好。为您的项目选择最佳工具完全取决于您做出明智的决定。既然布鲁诺和詹姆斯都发表了自己的看法,那么对于这个问题,你怎么看呢?BrunoSkvorc克罗地亚程序员Bruno拥有计算机科学、英语和文学三个硕士学位。他是SitePoint的php专栏作家和Diffbot.com的开发传播者。他避开了像瘟疫这样的遗留代码,选择了尽管使用了黑客技术的项目,他是跑步机桌面爱好者和捕手,他有一个博客:有时是博客。JamesHibbard我是一名Web开发人员,目前居住在阳光明媚的德国北部。我喜欢用JavaScript和Ruby编程,您经常可以在SitePoint的javascript论坛上看到我。当我不编写代码时,我喜欢运行。
