当前位置: 首页 > 科技观察

PHPvsNode.js深入探讨

时间:2023-03-12 18:35:49 科技观察

网络正处于高速发展的时代。服务器端开发人员在选择语言时非常困惑,从C、Java和Perl等长期占主导地位的语言,到Ruby、Clojure和Go等专注于Web开发的语言。只要你的项目运作良好,你的选择似乎就不那么重要了。但是如何让这些新的网络开发人员做出正确的选择呢?我不想在PHP和NodeJs这两个阵营之间开战。我将在该领域比较两种语言的发展:PHPRasmusLerdorf在1994年创建了PHP。它由安装在Web服务器(Apache、Ngix)上的组件运行。PHP代码可以与HTML混合。初学者不需要太多的练习就能快速写出有价值的代码。这使得PHP越来越受欢迎,现在世界上80%的服务器都在运行PHP。WordPress是世界上四分之一的网站使用的内容管理系统,它是用PHP编写的。Node.jsRyanDahl于2009年创建了Node.js。它基于Google的V8JavaScript解释引擎(负责在Chrome浏览器中执行客户端JavaScript代码)。与其他语言不同,Node.js具有用于处理网络请求和响应的内置库,因此您不需要单独的服务器(Apache、Ngix)或其他依赖项。Node.js是非常新的,但很快就获得了大量的追随者。许多大公司都在使用它,例如Microsoft、Yahoo、LinkedIn和PayPal。那么我们钟爱的C#、Java、Ruby、Python、Perl、Erlang、C++、Go、Dart、Scala、Haskell等呢?如果文章比较了以上所有语言的各种参数,文章会很长,你还会看吗?您期望程序员了解所有编程语言吗?这显然是不可能的。我主要比较PHP和Node.js的原因主要有以下几点:首先,它们值得比较。两者都是开源的,都致力于Web开发,并且都可以用于类似的项目。PHP已经存在很长时间了,但是Node.js才刚刚起步并且受到越来越多的关注。PHP程序员应该相信Node.js的炒作吗?我应该考虑切换语言吗?我知道,我热爱编程语言,自1990年代以来我一直在使用PHP和JavaScript,并且在Node.js方面也有几年的经验。此外,我还涉猎了其他技术,但在这里无法对其做出客观的评价。还有,你比较多少种语言都没有关系,因为总会有人在某个地方抱怨我没有提到他们的语言。SitePoint上的竞争程序员花费大量时间来提高自己的编程技能。有些人有能力在编程语言之间游刃有余,但那些达到更高水平的人会根据多种因素做出自己的选择。在主观方面,您将推进并捍卫您的技术决策。SitePointSmackdowns不采取“选择适合你的东西,朋友”的观点。我会根据个人经验、要求和喜好提出建议。你可能不同意我说的所有观点,没关系,重要的是你的意见会让别人做出更明智的选择。#p#测评方式下面将对PHP和Node.js进行十轮对比。每一轮都考虑可应用于任何网络技术的常见开发挑战。我们不会深入细节;很少有人关心随机数生成器或数组排序的值。谁赢得最多回合,谁就是赢家。你准备好了吗?让我们开始比赛吧。.....第1轮:您可以多快开始创建“HelloWorld”网页?在PHP中:这段代码可以放在任何可以被PHP引擎解析的文件中——通常是扩展名为.php的文件。在浏览器中输入URL即可跳转到该文件。诚然,这还不是全部。此代码只能在安装了PHP的Web服务器上运行(PHP有一个内置服务器,但是,最好使用更强大的服务器)。大多数操作系统都提供服务器软件,例如Windows上的IIS、Mac和Linux上的Apache,尽管它们需要启动和配置。通常使用预构建的安装程序(如XAMPP)或虚拟机映像(如Vagrant)。更简单的方法:将您的文件上传到任何网络主机。相比之下,安装Node.js轻而易举。您可以下载安装程序或使用包管理器。接下来让我们在hello.js中创建网页:varhttp=require('http');http.createServer(function(req,res){res.writeHead(200,{'Content-Type':'text/plain'});res.end('HelloWorld!');}).listen(3000,'127.0.0.1');在浏览器访问http://127.0.0.1:3000/之前,需要在终端节点输入hello.js启动应用。通过上面的五行代码,我们创建了一个微型Web服务器,虽然令人惊讶,但即使对于具有丰富的客户端JavaScript经验的人来说也很难理解。PHP在概念上更简单,因此赢得了这一轮。懂一点PHP声明的人可以开发一些有用的东西。PHP有更多的软件依赖性,但是PHP的概念对于新手来说没有那么繁琐。了解一些JavaScript和开发Node.js应用程序是两件不同的事情。Node.js开发方法不同于大多数服务器端技术。您需要先了解一些相当复杂的概念,例如关闭和回调函数。第2轮:帮助和支持如果没有官方文档和资源(课程、论坛、StackOverflow)的帮助,您一定会遇到困难。PHP凭借其大量的指南和二十年的问答,轻而易举地赢得了这一轮。无论您尝试做什么,总会有人在您面前遇到同样的问题。Node.js有很好的文档,但比PHP更年轻,帮助也不大。JavaScript的历史与PHP一样长,但主要帮助的是浏览器开发,这几乎没有帮助。第3轮:语言语法声明和结构是否合乎逻辑且易于使用?与某些语言和框架不同,PHP不约束你以某种方式编写,它由你决定。你可以从几行程序开始,然后添加一些方法,然后写一些简单的PHP4模式对象,最后写出优雅的面向对象的MVC模式PHP5+应用程序。您的代码可能一开始很乱,但它会起作用,并且随着您对它的理解,它会变得更好。PHP的语法在不同版本之间可能会略有不同,但向后兼容性通常非常好。但不幸的是,这也导致了一个问题:PHP乱七八糟。比如,如何统计一个字符串中的字符个数?算不算?str_len?还是斯特伦?还是mb_strlen?PHP有数百个函数,命名规则也不完全一致。你可以不看文档就试着写几行代码。JavaScript比较简单,只有几十个核心声明。但是语法经常被开发者喷,因为它的原型对象模型看起来平易近人,实则不然。而各种数学错误(0.1+0.2!=0.3)和类型转换混乱('4'+2=='42'and'4'-2==2)也引起了很多抱怨,但是这些情况很常见在世界上。它不会造成任何问题,大多数语言都有这个借口。PHP有其优点,但我会在这一轮中投票给Node.js。原因如下:JavaScript是世界上最难理解的语言——但是当你顿悟并且概念通过时,其他语言就太笨拙了。JavaScript代码比PHP更干净。例如,您不需要再使用JSON和UTF-8。全栈工程师可以在客户端和服务器上使用JavaScript。大脑不需要来回切换。对JavaScript的深刻理解会让你更想使用它,但PHP不会。第4轮:开发工具这两种技术都有一些不错的编辑器、IDE、调试器、验证器和其他工具。我认为这是一个平局,但这里有一些工具让Node.js略有优势:NPM-包管理器。NPM允许您安装和管理依赖项、设置配置变量、定义脚本等。PHP的Composer项目受到NPM的启发,并且在某些方面更强大。不过PHP默认不提供,活跃库较小,在社区影响较小。NPM还对Grunt和Gulp等构建工具的发展负有部分责任,这些工具彻底改变了开发方式。有时PHP开发人员可能想要/需要安装node.js,这不是倒退。第五轮:环境技术可以在哪里使用和部署?支持哪些平台和生态系统?Web开发人员经常需要开发一些不完全针对Web的应用程序,例如构建工具、迁移工具、数据库转换脚本等。PHP有开发桌面应用程序和命令行工具的方法,但您不会使用它们。本质上,PHP是一种服务器端技术,它擅长于此,但很少扩展到此之外。几年前,JavaScript被认为是非常有限的,有一些边缘技术,但它的主要战场仍然是浏览器。Node.js改变了这种认知,吹出了很多JavaScript项目,你可以在任何地方使用JavaScript:浏览器、服务器、终端、桌面甚至嵌入式系统,这使得JavaScript无处不在。Round6:集成开发技术是有限的,除非它们可以与数据库和驱动程序集成。PHP在这方面很强。PHP已经存在很多年了,它的扩展让他可以用主流或冷门的API直接与服务器通信。Node.js正在迎头赶上,但您可能会为一些陈旧的、冷门的技术寻找成熟的集成组件而头疼。第七轮:托管和部署将您喜欢的新应用程序部署到在线Web服务器有多容易?这是PHP的又一次重大胜利。联系一个随机的网络托管公司,你可以找到对主要PHP的支持,也许是免费的MySQL。对于沙盒,PHP被认为更简单并且可以禁用有风险的扩展。Node.js是一个不同的野兽,服务器端应用程序永远运行。您需要一个具有root权限的物理/虚拟/云或自定义服务器环境,这对于某些服务器来说是遥不可及的,尤其是那些共享的服务器,您可能会导致整个服务器宕机。Node.js托管会很容易,但我认为它永远不会像FTP上传一些PHP文件那样容易。第8轮:性能PHP很快,有很多项目和选项可以让它运行得更快。即使是注重性能的PHP开发人员也不必担心速度,但Node.js的性能通常更好。当然,性能在很大程度上取决于开发团队的经验和他们是否感兴趣,但是Node.js仍然具有以下优势:较少依赖PHP应用程序的所有请求必须通过WEB服务器路由才能启动PHP的解释器运行PHP代码。Node.js不需要这些依赖项,你基本上会使用一个带有服务器的框架,比如Express,它非常轻量级并且在你的应用程序中发挥了很好的作用。更小更快的解释器Node.js的解释器比PHP的更小更灵活。它不受与旧语言的遗留兼容性问题的阻碍,并且谷歌已经投入大量精力来提高V8引擎的性能。Application***OnlinePHP遵循标准的客户端-服务器模型。每个页面请求都会初始化应用程序;您读取配置参数、连接到数据库、读取信息和呈现HTML。Node.js应用程序持久运行,只需启动一次。例如,您可以创建单个数据连接对象,然后将所有请求多路复用在一起。不可否认,PHP有多种方法可以做到这一点,例如使用Memcached,但这不再是该语言的标准功能。事件驱动、非阻塞I/OPHP和大多数其他服务器端语言都使用阻塞执行模型。当你执行一个命令时,比如从数据库中取数据,你必须等待命令执行完才能执行下面的内容。Node.js通常不会等待。相反,您需要提供一个回调函数,该函数将在指令完成执行时调用一次。例如://fetchrecordsfromaNoSQLdatabaseDB.collection('test').find({}).toArray(process);console.log('finished');//processdatabaseinformationfunctionprocess(err,recs){if(!err){console.log(recs.length+'recordsreturned');}}在这个例子中,console会先输出'finished',然后再输出'Nrecordsreturned',因为process函数是在数据全部返回的时候调用的。换句话说,它可以在解释器在其他进程中处理的同时做其他事情。请注意,情况很复杂,有几个注意事项:Node.js/JavaScript仅在单线程上运行,但大多数Web服务器是多线程的,并发处理请求。一个用户长时间运行的JavaScript处理可能会阻止其他用户的代码执行,除非拆分任务或使用WebWorkers。基准是主观的和有缺陷的;可以找到一些Node.js更好的示例,以及一些PHP更好的相关示例。程序员只是想证明自己的信仰!编写异步事件驱动代码既复杂又具有挑战性。我只能根据我的经验说:我的Node.js应用程序比它们的PHP应用程序快得多。你的可能不是,但你永远不会知道,直到你尝试。第九轮:开发者热情这超出了“常见Web开发挑战”之类的目标,但它很重要。如果您害怕每天编写代码,那么哪种语言更好并不重要。很难进行比较,但一些PHP开发人员对PHP语言充满热情。您最后一次阅读让您神魂颠倒的PHP文章或幻灯片是什么时候?或许就不用多说了吧?可能降低曝光率?还是我没有找对地方?PHP7有一些新特性,但技术多年来一直停滞不前,即便如此,也很少有开发人员抱怨PHP。JavaScript已经分裂了社区,有些人喜欢它,有些人讨厌它,有些程序员处于中间状态,但尽管如此,对Node.js的反馈大多是积极的,她处于风口浪尖,部分原因是她太新了,赞美不一定持久。目前,Node.js赢得了这一轮。第10轮:前景选择哪种服务器端语言并不重要;它会继续工作,即使它没有更新(是的ColdFusion!)尽管许多人仍在使用PHP,但我保证它可以再坚持20年。Node.js迅速崛起。它提供了一种现代的开发方式,使用与客户端开发相同的语法,同时支持HTML5革命性的功能,例如Web套接字和服务器端事件。尽管对该语言的分叉函数存在一些争议,但Node.js的使用量呈指数级增长。Node.js势必会蚕食PHP的市场份额,但我不认为她能完全取代它。这两种技术都有光明的未来。我宣布这一轮平局。FinalWinner最终比分:Node.js胜5局,PHP胜4局,平局。我以为它会倒向一边,但结果比我预期的要温和。Node.js有一点学习曲线,对初学者来说并不理想,但她赢得了这场决斗。而且,如果您是一位热爱该语言的可靠JavaScript程序员,Node.js不会让您失望。它更新并提供您自己的Web开发体验,您不会错过PHP。但是不要小看PHP,PHP还活着,你不应该仅仅因为Node.js更快、更新或更流行而追随Node.js的趋势。PHP简单易学,仍然支持专业的编程技能,帮助无处不在,开发简单。即使是顽固的Node.js开发人员也不得不考虑将PHP用于简单的网站和应用程序。我的建议:评估选项并根据您的需要选择一种语言,这比像这篇“比较”文章可靠得多。