SitePoint近期举办了一场PHP与Node.js的巅峰对决,Craig Buckler让这两种开发技术在十个挑战中一较高下,以确定最终的赢家。
正如Craig在文章中指出的那样,这种比较总是存在争议。作为有趣的后续环节,我们邀请了Bruno Škvorc(SitePoint的PHP编辑)和James Hibbard(SitePoint的JavaScript编辑之一)对每一轮比赛进行评论。
以下是他们逐轮的评估……
第一轮的挑战是查看使用每种语言构建“Hello World”网页的速度。这包括设置服务器环境所需的时间。
在Craig的估计中,PHP赢得了这一轮,部分原因是它“概念上更简单”,“对新开发者来说不那么令人生畏”。
PHP在“入门”方面获胜,纯粹是因为更多的主机使其入门变得如此容易。这是一个采用问题,而不是其他任何问题。如果更多主机绕过使用Node的命令行,直接转到文件上传和控制面板中的简单“重新加载应用程序”按钮,它们将是平等的。然而,将某些内容显示在屏幕上的实际语法在PHP中要简单得多——尤其对于编程新手来说。
在本地开发时,我并没有看到两者之间有很大的区别。要在浏览器中运行PHP脚本,您需要安装某种服务器堆栈;要运行Node脚本,您需要安装Node,最好还要安装一个Web框架,例如express。但是,正如Craig所说,PHP在概念上更简单。Node的入门门槛更高。对此没有异议。
第二轮考察了获得每种语言的帮助和支持的难易程度。PHP赢得了这一轮,主要是因为它的历史悠久。
Bruno对此保持沉默
我同意这一点。Node.js是一项较新的技术,因此目前可用的帮助较少。然而,随着Node的成熟,这将越来越不重要。
第三轮比较了PHP和JavaScript的语法易于理解和使用的程度。Craig将这一轮授予JavaScript。
我强烈不同意这一点。虽然PHP确实有一些怪癖,但其中许多在最近已被纠正,并且许多奇异之处将在最新的版本中被移除。另一方面,在JS世界中存在这种情况和这种情况。
关于第3点(你的大脑不需要切换模式,因为你可以在客户端和服务器端使用JS),我不同意。服务器环境与客户端环境完全不同,需要切换大脑模式。还有一些新语法你不能在浏览器中使用,反之亦然,所以这有点像切换语言。
第4点(理解JS会让你更想使用它)也是我不同意的一点。多年来一直使用JS和PHP,我使用JS越多,就越不喜欢它——但这纯粹是个人偏好。
我喜欢JavaScript。我知道它有其怪癖,我知道它有一些陷阱,但是ECMAScript 2015将纠正很多这些问题,并为该语言带来一些令人兴奋的新特性。JavaScript既强大又灵活,可以适应许多不同的编程风格。与PHP相比,我喜欢编写JavaScript。Node应得这一轮的胜利。
第四轮考虑了每种技术可用的工具,Node由于npm而险胜。
虽然Composer最初的灵感来自npm,但它现在比npm好得多,并且如果必须安装同一库的两个版本,它不会破坏你的系统,不像npm。与npm不同,Composer可以安装递归依赖项,这是npm根本无法做到的事情——但这是绝对必要的,并且应该是着手构建包管理器的人首先想到的事情。
npm还有一些非常糟糕的错误消息,我喜欢称之为“核心开发者友好型”——只有编写它们的人才能理解它们。最后,npm与Vagrant配合得不好,有效地阻碍了你正确开始——更不用说他们没有关注用户的愿望。这是一个多年来一直存在的错误,使其在Windows上基本上无法使用——这绝不是一个微不足道的用户群。PHP也有它自己的愚蠢错误,但这些错误不会多年来疏远整个操作系统的用户。
诚然,Composer并没有与PHP捆绑在一起,但我认为它不应该这样做。不应该偏袒一个实际上是单独应用程序的包管理器。如果有人,有一天,真的为Node制作了一个好的包管理器,那么将其替换为当前的包管理器将是官僚主义的地狱,更不用说让人们过渡了。此外,安装它实际上只是一行终端命令,或者下载一个安装程序。
Composer影响较小的说法是完全错误的。自Composer开发以来,它影响了所有加入PHP行列的新PHP开发人员,以及大多数不得不将其添加到当前工作流程中的优秀开发人员。仅仅因为在Composer出现之前有很多PHP用户,并不意味着它的影响较小。自从它被创建以来,它就产生了巨大的影响。“对社区的影响较小”之类的绝对性陈述如果没有事实依据就不应该做出。
我无法反驳大多数PHP开发人员最终都会安装Node的事实,这是真的。可悲的是,许多优秀的工具都是优先使用Node开发的,但我仍然希望由于BowerPHP等项目而存在一个无Node的开发环境。
我很高兴这一轮Node获胜。
我喜欢npm。它易于安装,易于使用,并且几乎可以满足任何需求,都有数千个可用的包。我还喜欢npm允许您选择全局安装和本地安装包(与Ruby等语言相反,在Ruby中,gem通常与您的Ruby版本一起安装)。该工具也非常好。Bower和Grunt等工具在我的工作流程中占据着常规的位置,并且多次提高了我的生产力。
还值得一提的是,npm v3正在测试版中。这解决了Bruno提出的许多问题,例如嵌套node_modules方法错误。
整个巅峰对决的引言:
PHP开发人员最终可能想要/需要安装Node.js。反之则不然。
第五轮涉及到技术的使用和部署位置,以及支持哪些平台和生态系统。Craig并没有明确说明他对这一轮的评价,但这看起来对Node来说是一场惨败。
Craig说他会比较PHP和Node的Web优势(一般的Web开发挑战),然后说JS无处不在。首先,我们比较的是Node.js,而不是JS本身。其次,我们比较的是它们可以运行的语言和环境。说猴子比鱼好,因为鱼没能爬树,这只是愚蠢的。但是猴子和鱼都会游泳,所以让我们比较一下它们游泳的程度。
在Web开发环境中,PHP轻松获胜。PHP中有一些用于桌面开发的工具——是的,确实,你可能不会使用它们。但是你肯定可以使用PHP的命令行方面。
同样,我同意Craig的观点。许多使Node.js如此流行的特性(速度、可扩展性、与JSON的亲和力、低资源使用率)也使其非常适合许多其他类型的应用程序,例如为物联网设备提供动力。我的意思是,谁不喜欢机器人?
Node还催生了NW.js(基于Chromium和Node.js的应用程序运行时)等项目,它允许您使用HTML和JavaScript编写原生应用程序。令人兴奋的时代!
第六轮考察了与数据库和驱动程序的集成,PHP主要因为其历史悠久而获胜。
集成是平局。PHP在这方面具有年龄优势,提供了更多选择,但这同时也意味着它遭受了一些严重过时的集成,例如mysql扩展——我们只在PHP7中设法摆脱了它,但它多年来一直无法使用。
我不确定我是否同意这一点。整个回合的措辞似乎模糊不清,我希望有一个“较旧、较不受欢迎的技术”的例子。这也可以是一个很好的机会来强调Node的一个很大的优点——它使用JSON。JSON可能是Web上最重要的数据交换格式,也是与许多最新的NoSQL数据库交互的通用语言。JSON非常适合JavaScript程序使用,这意味着当您使用Node时,数据可以在层之间流畅地流动,而无需重新格式化。您可以从浏览器到服务器到数据库都使用一种语法。
第七轮考察了将新应用程序部署到实时Web服务器的难易程度,在Craig看来,PHP在这方面是明显的赢家。
再次,Bruno保持沉默,没有什么要补充的
这是Node需要追赶的一个领域。每个经济型Web托管公司都提供包含MySQL的PHP包。要查看某种输出,您只需创建一个带有.php扩展名的文件,在?<和?>之间放入一些有效的语句,上传文件并将其指向您的浏览器即可。Node的情况并非如此。当然,有很多Node托管选项,但它们总是需要更多设置和命令行访问,这可能会让初学者望而却步。PHP毫无疑问地赢得了这一轮。
第八轮关注速度;尽管这通常取决于开发团队的经验和投入的精力,但Craig指出了Node在多个方面的优势。
误解比比皆是。首先,这篇帖子使所有性能讨论都变得毫无意义。任何和所有性能增益/损失都完全取决于开发人员的经验和应用程序的类型。但即使这篇帖子没有让你相信性能讨论在没有上下文的情况下是愚蠢的,这里也有一些我自己的论点:
性能讨论是,并且将永远是平局。(除非您正在使用Java——那么Java总是输!;))
Node被吹捧为高性能、低延迟应用程序的首选运行时,并且已经进入多家财富500强公司的代码堆栈中。由于其非阻塞I/O机制和Google Chrome V8引擎技术,它已成为“快速”和“可扩展”的代名词。网上有很多关于Node如何为公司带来重大性能提升并提高开发人员生产力的故事。我很高兴看到这一轮Node获胜,但我理解这是一个有争议的点。
第九轮考察了Craig对开发人员目前对PHP和Node表现出多少热情的看法,在他看来,Node轻松获胜。
Craig,你肯定是在错误的地方寻找。PHP社区非常热情且非常活跃。每年有超过20个大型会议,并且会讨论一些令人惊叹的话题。随着HHVM和PHP7的出现,踏水已经结束。
此外,我想说的是,Node的开发人员在6年的开发之后,仍然没有学会版本号是如何工作的(在撰写本文时为v0.12.5版本),这很奇怪。这种不成熟和绝望的“稳妥行事”(哎呀,你使用了不稳定的东西,你的错导致你的公司崩溃了),加上关键但被忽略的古老错误,疏远了整个操作系统的用户群,这将让任何严肃的开发人员远离编程语言的生态系统。
我不喜欢Node。我的不喜欢是基于负面经验,主要围绕npm展开。这将来可能会改变,但就目前而言,每次我必须以任何方式使用Node时,我都会充满恐惧和绝望。我们都有自己的偏好,但重要的是保持客观,为工作选择合适的工具。但同样重要的是要承认,有时选择合适的工具意味着首先选择错误的工具,因为你还不知道。所以不要听Craig的。不要听Jim的。不要听我的。试一试——看看什么有效,找出什么感觉良好,然后使用它。最终,使你感觉高效和很棒的环境是最好的环境,而不是给你带来毫秒级更短加载时间的环境。
Node很热门。现在Nodeland正在进行大量的创新。虽然热情是主观的,但我很高兴Node赢得了这一轮。
第十轮考察了这两种语言的未来,Craig宣布这一轮为平局,因为这两种语言在这个阶段似乎都有光明的前景。
Bruno不得不赶紧去编写更多PHP代码,并为SitePoint编辑令人难以置信的PHP文章
James也很渴望回到他心爱的JavaScript频道,但他提供了这些临别赠言:
对于这一轮来说,平局是一个公平的结果。Node是冉冉升起的新星,但要取代PHP,还需要一些巨大的事情。
总而言之,如果你的唯一工具是锤子,那么每个问题看起来都像钉子。Node并非适合所有场景的完美选择,事实上,在许多情况下,不使用它是有意义的。但是,Node擅长的事情,它做得非常好。由您做出明智的选择,并为工作选择最佳工具。
那么,现在Bruno和James已经表达了他们的意见,您有什么要说的呢?
PHP和Node.js由于其底层架构的不同,具有不同的性能特性。PHP默认情况下是一种同步语言,这意味着它一次执行一个操作,等待每个操作完成之后再继续执行下一个操作。当处理大量的I/O操作时,这可能会降低性能。另一方面,Node.js是基于JavaScript构建的,JavaScript本质上是异步和非阻塞的。这意味着它可以同时处理多个操作,而无需等待一个操作完成才能启动另一个操作,从而可能提高性能,尤其是在具有大量I/O操作的应用程序中。
由于PHP语法简单且在线资源丰富,因此通常被认为更容易被初学者学习。Node.js虽然并不复杂,但需要扎实掌握JavaScript和异步编程,这对初学者来说可能具有挑战性。但是,如果您已经熟悉JavaScript,您可能会发现Node.js更容易上手。
Node.js通常更适合实时应用程序,例如聊天应用程序、协作工具或多人游戏。这是因为它具有事件驱动的非阻塞架构,允许它处理多个并发连接,并具有高吞吐量,这对于实时应用程序至关重要。
PHP和Node.js都可以扩展以支持大型应用程序,但它们以不同的方式进行扩展。PHP垂直扩展,这意味着您可以通过添加更强大的硬件来提高其容量。另一方面,Node.js通过向服务器池添加更多机器来水平扩展。Node.js还内置了一个模块Cluster,允许您利用多核系统来创建共享服务器端口的子进程。
PHP和Node.js都有庞大而活跃的社区,为其开发做出贡献并提供支持。PHP历史悠久,拥有大量的资源、库和框架。Node.js虽然较新,但发展迅速,并得到谷歌和微软等大型公司的支持。这两个社区都在积极开发和维护各种开源项目。
PHP和Node.js都具有强大的安全功能,但应用程序的安全性通常更多地取决于开发人员的知识和实践,而不是语言本身。PHP存在的时间更长,用户群也更大,这意味着它已经接触到更多安全威胁,并因此开发了更多安全功能和最佳实践。Node.js比较新,已知的漏洞较少,但内置的安全功能也较少。
PHP和Node.js都可以针对SEO进行优化。PHP多年来一直用于创建易于被搜索引擎索引的动态网站。另一方面,Node.js可用于构建快速、可扩展的应用程序,可以改善用户体验和网站性能,这两者都是SEO的重要因素。
PHP广泛支持各种数据库,包括MySQL、PostgreSQL和SQLite。它还通过第三方库支持MongoDB等NoSQL数据库。另一方面,Node.js由于其基于JSON的数据处理,特别适合MongoDB等NoSQL数据库。它还通过第三方模块支持关系数据库。
PHP专为服务器端渲染而设计,多年来一直用于此目的。另一方面,Node.js也可以执行服务器端渲染,尤其是在与Express.js等框架一起使用时。但是,Node.js通常用于构建API和后端服务,前端由单独的技术处理。
开发速度可能因项目的复杂性和开发人员对语言的熟悉程度而异。PHP凭借其简单的语法和丰富的内置函数,可以实现快速开发。Node.js凭借其事件驱动的架构和非阻塞I/O,也可以实现快速开发,尤其是在实时应用程序或具有大量I/O操作的服务中。
以上是php vs node.js smackdown:回复权利的详细内容。更多信息请关注PHP中文网其他相关文章!