必威西盟体育网页登录SitePoint Smackdown: PHP vs Node.js

克雷格的盾牌
分享

PHP vs Node的手套已经戴上

网络是一个不断变化的技术领域。服务器端开发人员有一个令人眼花缭乱的选择,从长期存在的重量级语言(如Java、C和Perl)到较新的以web为中心的语言(如Ruby、Clojure和Go)。如果应用程序能够正常工作,那么选择什么并不重要。

但是那些刚接触web开发的人如何做出明智的选择呢?

我希望不要开始一场圣战,但我正在让两个开发规程相互对立:

  • PHP
    PHP由Rasmus Lerdorf在1994年创建。它由解释器处理,通常作为一个模块安装在web服务器上,如Apache或Nginx。

    PHP代码可以与HTML混合使用。这并不一定是最佳实践,但是那些语言新手可以很快地生成有用的代码。它促进了该语言的流行,PHP现在被用于超过全球80%的网络服务器.这在很大程度上得益于WordPress一个PHP内容管理系统四分之一的网站

  • node . js
    Node.js由Ryan Dahl在2009年创建。它使用谷歌V8 JavaScript引擎的客户端代码Chrome网络浏览器.不同寻常的是,这个平台有内置的库来处理web请求和响应——你不需要单独的web服务器或其他依赖项。

    Node.js相对较新,但已经迅速获得关注。微软、雅虎、领英和贝宝等公司都在使用它。

c#, Java, Ruby, Python, Perl, Erlang, c++, Go, Dart, Scala, Haskell等等在哪里?

一篇比较每一种选择的文章会很长。你会读吗?你指望一个开发人员了解所有这些吗?我将此打击限制在PHP和Node.js,因为:

  1. 这是一个很好的比较。它们都是开源的,主要针对web开发,也适用于类似的项目。
  2. PHP是一种历史悠久的语言,但Node.js是一个受到越来越多关注的年轻新贵。PHP开发者应该相信Node.js的炒作吗?他们应该考虑换工作吗?
  3. 我了解并热爱这些语言。我从20世纪90年代末开始使用PHP和JavaScript进行开发,有几年的Node.js经验。我也涉猎过其他技术,但在本文中无法一一列举。

此外,我比较了多少种语言并不重要。有些人,在某个地方,会抱怨我没有包括他们最喜欢的!

关于Site必威西盟体育网页登录Point Smackdowns

开发人员花费许多年的时间来磨练他们的技术。有些人会被强加语言,但那些达到忍者级别的人通常会根据一系列因素做出自己的选择。这是主观的;你将促进并捍卫你的技术决策。

也就是说,SitePo必威西盟体育网页登录int Smackdowns不是“用任何适合你的东西,伙计”评论。我会根据自己的经验、要求和偏好提出建议。你会同意一些观点,不同意另一些观点;那太好了——你的评论会帮助别人做出明智的选择。

评价方法

PHP和Node.js将在接下来的十轮中进行比较。每一轮比赛都考虑一个可以应用于任何web技术的通用开发挑战。我们不会讲得太深;很少有人会关心随机数生成器或数组排序算法的相对优点。

总冠军将是赢得最多回合的技术。准备好了吗?让战斗开始吧……

第一轮:开始

多快可以建立一个“Hello World”网页?在PHP中:

<?php回声“Hello World !”?>

代码可以放在PHP引擎解释的任何文件中——通常是带有. php扩展。在浏览器中输入映射到该文件的URL,就完成了。

诚然,这并不是故事的全部。代码只能通过安装了PHP的web服务器运行。(PHP有一个内置服务器,不过最好使用更健壮的服务器)。大多数操作系统提供服务器软件,如Windows上的IIS或Mac和Linux上的Apache,尽管它们需要启用和配置。使用预先构建的设置通常更简单,例如XAMPP或虚拟操作系统映像(例如流浪的).甚至更简单:上传你的文件到几乎任何一个网络主机。

相比之下,安装Node.js简直是小菜一碟。你可以下载安装程序使用包管理器.让我们在里面创建网页hello.js

varhttp需要“http”httpcreateServer函数要求的事情resreswriteHead200“内容类型”“文本/普通”res结束“Hello World !”3000“127.0.0.1”

您需要从终端启动应用程序节点hello.js才能在浏览器中访问http://127.0.0.1:3000/。我们用五行代码创建了一个小型的web服务器,令人惊讶的是,即使是那些拥有丰富的客户端JavaScript经验的人也很难理解它。

PHP概念上更简单,赢了这一轮。那些知道一些PHP语句的人可以编写一些有用的东西。它有更多的软件依赖关系,但PHP概念对新开发人员来说不那么令人生畏。

了解一些JavaScript和编写Node.js应用程序之间有更大的智力飞跃。开发方法与大多数服务器端技术不同,您需要理解相当复杂的概念,如闭包和回调函数。

第二轮:帮助和支持

如果没有来自官方文档和资源的开发帮助,您将走不远课程论坛而且StackOverflowPHP轻松赢得这一轮;它有一个伟大的手册还有20年的问答。不管你在做什么,总有人以前遇到过类似的问题。

Node.js有很好的文档但他更年轻,可获得的帮助也更少。JavaScript存在的时间和PHP一样长,但它的大部分帮助都与浏览器内开发有关。这很少有帮助。

第三轮:语言语法

语句和结构是否合乎逻辑且易于使用?

与某些语言和框架不同,PHP不会强迫您以特定的方式工作,而是与您一起成长。您可以从一些多行程序开始,添加函数,然后逐步开发简单的类似php4的对象,最终编写漂亮的面向对象的MVC PHP5+应用程序。你的代码一开始可能很混乱,但它会随着你的理解而工作和发展。

PHP语法可以在不同版本之间更改,但向后兼容性通常很好。不幸的是,这导致了一个问题:PHP是一团糟.例如,如何计算字符串中的字符数?它是str_lenstrlenmb_strlen?有数百个函数,它们的命名可能不一致。试着写几行代码而不参考手册。

JavaScript相对简洁,只有几十条核心语句。也就是说,该语法引起了开发人员的不满,因为它的原型对象模型看起来很熟悉,但实际上并不熟悉。你也会发现对数学错误的抱怨(0.1 + 0.2 != 0.3)和类型转换混淆('4' + 2 == '42'而且'4' - 2 == 2) -但这些情况很少会引起问题,而且所有的语言都有怪癖。

PHP有好处,但我把第三轮奖励给node . js.原因包括:

  1. JavaScript仍然是世界上被误解最多的语言-但是,一旦有了概念,其他语言就显得很麻烦了。
  2. JavaScript代码比PHP更简洁。例如,您将不再需要在JSON和-之间进行转换值得庆幸的是——utf - 8。
  3. 全栈开发人员可以在客户端和服务器上使用JavaScript。你的大脑不需要切换模式。
  4. 理解JavaScript会让你更想使用它。PHP就不一样了。

第4轮:开发工具

这两种技术都有很好的编辑器、ide、调试器、验证器和其他工具。我考虑过平局,但有一个办法node . js的优势:npm -节点包管理器.NPM允许你安装和管理依赖关系,设置配置变量,定义脚本等等。

PHP的作曲家项目受到NPM的影响,在某些方面更好。但是,默认情况下PHP并没有提供它,它的活动存储库较小,对社区的影响也较小。

npm对诸如Grunt和Gulp等构建工具的发展负有部分责任,这些工具已经彻底改变了开发。PHP开发人员可能在某些时候想要/需要安装Node.js。反之则不然。

第5轮:环境

在哪里可以使用和部署这些技术?支持哪些平台和生态系统?Web开发人员经常需要创建一些并非完全针对Web的应用程序,例如构建工具、迁移工具、数据库转换脚本等。

有几种方法可以使用PHP进行桌面和命令行应用程序开发。你不会使用它们。从本质上讲,PHP是一种服务器端开发技术。它很擅长这项工作,但很少超越这些界限。

几年前,人们认为JavaScript的限制更大。虽然有一些边缘技术,但主要还是在浏览器上。node . js已经改变了这种看法,JavaScript项目出现了爆炸式增长。你可以在任何地方使用JavaScript——在浏览器、服务器、终端、桌面甚至嵌入式系统中。Node.js让JavaScript无处不在。

第6轮:整合

开发技术受到限制,除非它们能够与数据库和驱动程序集成。PHP在这方面很强大。它已经存在了很多年,它的扩展系统允许与大量流行的或不知名的api直接通信。

Node.js正在迅速赶上,但您可能很难找到针对较老的、不太流行的技术的成熟集成组件。

第7轮:托管和部署

将你的新应用部署到网络服务器上有多简单?这是另一个明显的胜利PHP.随便找几家网络托管公司联系,你会发现大多数公司都提供PHP支持。你可能会以很便宜的价格买到MySQL。PHP更容易沙盒化,可以禁用风险更大的扩展。

Node.js是另一种野兽,服务器端应用程序永久运行。您将需要一个真实/虚拟/云或专业服务器环境,理想情况下具有根SSH访问。这对某些主机来说太过了,特别是在共享主机上,可能会导致整个系统瘫痪。

Node.js托管将变得更简单,但我怀疑它是否能与FTP托管一些PHP文件的简单程度相匹配。

第八轮:表现

PHP也不逊色,有一些项目和选项可以让它更快。即使是最苛刻的PHP开发人员也很少担心速度node . js性能通常更好。当然,性能在很大程度上是开发团队的经验和谨慎的结果,但Node.js有几个优势…

更少的依赖关系

对PHP应用程序的所有请求都必须通过web服务器路由,该服务器启动运行代码的PHP解释器。Node.js不需要那么多依赖项,虽然你几乎肯定会使用服务器框架,比如表达,它是轻量级的,并且是应用程序的一部分。

一个更小,更快的解释器

Node.js比PHP解释器更小更灵活。它较少受到遗留语言支持的阻碍,谷歌在V8的性能上进行了巨大的投资。

应用程序永久开启

PHP遵循典型的客户机-服务器模型。每个页面请求都会启动您的应用程序;加载配置参数,连接到数据库,获取信息并呈现HTML。Node.js应用程序永久运行,只需要初始化一次。例如,您可以创建一个单独的数据库连接对象,每个人在每个请求期间都可以重用该对象。诚然,在PHP中有一些方法可以使用系统来实现这种类型的行为Memcached但这并不是该语言的标准特征。

事件驱动的非阻塞I/O

PHP和大多数其他服务器端语言使用明显的块执行模型。当您发出命令(例如从数据库获取信息)时,该命令将在执行到下一条语句之前完成执行。Node.js(通常)不会等待。相反,你提供一个回调函数,一旦动作完成就执行,例如。

//从NoSQL数据库中获取记录DB集合“测试”找到toArray过程控制台日志“完成”//进程数据库信息函数过程犯错推荐如果犯错控制台日志推荐长度+“已退回记录”

在这个例子中,控制台将在“N条记录返回”之前输出“finished”,因为过程函数在检索完所有数据后调用。换句话说,当其他进程繁忙时,解释器可以自由地做其他工作。

注意,情况很复杂,需要注意:

  • Node.js/JavaScript运行在单线程上,而大多数web服务器是多线程的,并发处理请求。
  • 为一个用户运行的长时间JavaScript进程会阻止代码为所有其他用户运行,除非您拆分任务或使用Web Workers
  • 对标是主观的、有缺陷的;你会发现Node.js打败PHP的例子和PHP打败Node.js的反例。开发人员善于证明他们所相信的一切!
  • 编写异步事件驱动的代码是复杂的,并且会带来自身的挑战。

我只能从经验出发:我的Node.js应用程序明显比PHP应用程序快。你的可能不是,但你不尝试就永远不会知道。

第九轮:程序员的激情

这可能是在拉伸“一般网页开发挑战”客观但很重要。如果你每天都害怕写代码,那么技术是好是坏就不重要了。

比较起来有点困难,但相对来说,很少有PHP开发人员对这种语言充满热情。您上一次阅读PHP文章或看到吸引观众的演示文稿是什么时候?也许一切都说完了?也许是接触较少?也许我找错地方了?PHP7中有一些不错的特性,但是这项技术已经停滞了几年。也就是说,很少有PHP开发人员会痛斥这门语言。

JavaScript分裂了社区。有人喜欢它,也有人讨厌它;很少有开发商持观望态度。然而,人们对Node.js的反应很大程度上是积极的,这项技术正处于风口浪尖。这在一定程度上是因为它是新产品,赞誉可能不会持久,但就目前而言,node . js赢了这一轮。

第十轮:未来

使用哪种服务器端语言并不特别重要;它将继续工作,即使项目被放弃(耶ColdFusion!)使用可能已经停滞,但仍有很多人继续使用PHP。这是一个安全的赌注,而且在接下来的20年里,对它的支持似乎是确定无疑的。

Node.js的崛起非常迅速。它提供了一种现代的开发方法,使用与客户端开发相同的语法,并支持革命性的HTML5特性,如web套接字和服务器发送事件。关于该语言的分支存在一些困惑,但使用仍在以指数级速度增长。

Node.js将不可避免地蚕食PHP的市场份额,但我怀疑它是否会超过PHP。这两种技术都有光明的前景。我宣布这轮平局。

总冠军

最终比分:五回合node . js,四到PHP一个平局。结果比我预期的更接近,可能是两种结果。

Node.js有一个陡峭的学习曲线,对于新手开发人员来说并不理想,但它赢得了这一打击。只是.如果你是一个称职的JavaScript程序员,并且热爱这门语言,Node.js不会让你失望。它感觉更新鲜,并提供了一个自由的web开发经验-你不会错过PHP

但不要低估它。PHP还活着,没有什么理由去追随Node.js的潮流,因为它看起来更快、更新或更时尚。PHP更容易学习,但支持熟练的专业编程技术。援助无处不在,部署也很简单。即使是顽固的Node.js开发人员也应该考虑使用PHP来开发更简单的网站和应用程序。

我的建议:评估选项,并根据您的需求选择一种语言.这比依赖实际多了“与”像这样的文章!


你同意克雷格的结论吗?这样的比较公平吗?子弹被操纵了吗?不要生气,动笔吧……

你可能对我们的对本文的答辩权由Si必威西盟体育网页登录tePoint的PHP和JS编辑器!

Baidu