PHP 和 Node.js 的10项对比挑战

澳门新葡亰娱乐在线 2

在最近 SitePoint 的 PHP vs Node.js
Smackdown
一文中,Craig Buckler
对两种语言就如何应对一系列的10个挑战进行了比较来决定哪一个总体上更佳。

网络正在处于一个日新月异的发展时代。服务器端开发人员在选择语言的时候非常困惑,有长期占主导地位的语言,例如C、Java和Perl,也有专注于web开发的语言,例如Ruby、Clojure和Go。只要你的项目运行良好,你的选择就显得没有那么重要了。

Craig 在书中讲到,这些比较总是有些矛盾。作为一个有意思的随访,我们要求
Bruno Škvorc (SitePoint 的 PHP 开发者)和 James Hibbard (SitePoint
的一个 JavaScript 开发者)对每一轮提供评论。

澳门新葡亰娱乐在线 1

下面是他们详细的看法…

  但是如何让这些新的web开发人员做出一个正确的选择呢?

澳门新葡亰娱乐在线 2

  我不希望展开一场PHP、NodeJs两大阵营之间的战争,我将会对比这两种语言所在领域的发展状况:

第一轮:开始

Round 1 挑战是看你用每种语言多快可以构建一个“Hello
World”的页面。这个包括搭建服务器环境所花的时间。

据 Craig 估计,PHP
赢得这一轮,部分原因是因为这种语言“概念上更简单”,并且“对于新的开发者来说不那么吓人”。

Bruno:

PHP
赢得”开始”这一轮纯粹是因为更多的主机支持这种语言因此开始非常简单。这是拿来就好用了而不需要做额外的事情。如果更多的主机忽略使用
Node 命令行而直接采用文件上传的方式,并且在控制面板上用一个简单的
“reload app”
键,那么两者将会一样。然而就在屏幕上显示东西的实际语法而言,PHP
是更简单些——特别是对那些没有编程经验的人而言。

James:

当在本地机器上开发的时候,我没有在两者之间看到很大的不同。在你的浏览器上运行
PHP 脚本,你需要安装一些服务器软件;要运行 Node 脚本,你需要安装
Node, 并且最好安装一个 web 框架比如express. 然而,正如 Craig 说的,
PHP“概念上更简单”.Node 的进入门槛更高。对此没有争议。

  • PHP
    Rasmus
    Lerdorf在1994年创造出了PHP。它是由安装在web服务器(Apache、Ngix)上的组件运行的。

    PHP代码可以和HTML混合到一块。
    对于初学者就能很快写出很有价值的代码,这并不需要太多的练习。 这让PHP变得越来越流行,
    现在全球百分之八十的服务器上都在运行着PHP。全球四分之一的网站都在用的一个内容管理系统–WordPress,就是用PHP写的。

  • Node.js
    Ryan Dahl在2009年创造了Node.js。它是基于Google的V8
    JavaScript解释引擎(在Chrome浏览器里它负责执行客户端的JavaScript代码)。与其它语言不同的是Node.js内置了处理网络请求和响应的函数库,所以你不需要单独的服务器(Apache、Ngix)或者其他依赖。

    Node.js虽然很新但是很快就获得了极大的追捧。在很多的大公司都有在使用,例如:Microsoft,Yahoo,LinkedIn和PayPal。

第二轮: 帮助和支持

澳门新葡亰娱乐在线,第二轮会考量在两种语言中,获得帮助和支持的难易程度。PHP赢得了这一轮,主要因为它出现的更久一些。

  我们所钟爱的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的经验。除此之外我也涉猎了其他的技术,但是在这里我还不能对他们作出客观评价。

  另外,对多少语言做比较不重要,因为总会有某些地方的某些人抱怨我没有提到他们语言。 

Bruno:

关于这个保持沉默。

  SitePoint上的角逐

  程序员会花费很多时间来提升他们自己的编程能力。一些人有编程语言之间的延伸能力,但是这些达到更高层次的人根据很多的因素来做出他们自己的选择。从主观方面来说,你将会推进并且捍卫你的技术决策。

  SitePoint
Smackdowns并没有采取“选择适合你自己的,朋友”这样的观点。我将会根据个人的经验、要求和喜好提出建议。你可能不会同意所有的我所说的所有观点,这并不重要,重要的是你的意见将会给其他人做出更加明智的选择。

James:

我同意这个说法。Node是一门新技术,所以目前,帮助会少一些。可是当Node越来越成熟的时候,这方面就不是问题了.

  评估方法

  下面将会对 PHP 和 Node.js
进行十个轮次的比较。每个回合都会考量可以应用到任意 web
技术的常见的开发挑战。我们不会太深入讨论细节;很少有人会关心随机数生成器或数组排序的价值。

  赢得最多回合的将会是优胜者。准备好了吗?开始较量吧。。。。。。

第三轮: 语法

第三轮比较了理解两种语言语法的难易程度。Craig判定这一轮Node获胜。

  第一轮:起步

  创建一个“Hello World” web 页面有多快呢?在 PHP 中:

<?php
    echo 'Hello World!';
?>

  这段代码可以放置在可以被 PHP 引擎解析的任意文件中–通常,是以 .php
为后缀的文件。在浏览器中输入 URL 跳转到文件即可。

  不可否认,这不是全部。这段代码只能运行于安装了 PHP 的 web
服务器(PHP
有一个内置的服务器,尽管如此,最好还是使用一个更健壮的服务器)。大多数操作系统提供了服务器软件,如 windows
上的 IIS,Mac 和 Linux 上的
Apache,尽管它们需要启动和配置。通常使用提前构建的安装程序,如 XAMPP或虚拟机镜像(如 Vagrant)。一种更简单的方式:上传你的文件到任意的
web 主机。

  对比而言,安装 Node.js
轻而易举。你可以 下载安装程序 或者 使用包管理器。
接下来让我们在 hello.js 中创建 web 页面:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!');
}).listen(3000, '127.0.0.1');

  在浏览器中访问   之前,你需要在终端输入 node
hello.js 来启动应用程序 。通过上面的五行代码,我们已经创建了一个小型的
web 服务器,尽管这很令人吃惊,但是即便拥有很强客户端 JavaScript
经验的人也很难理解。

  PHP 在概念上更简单所以赢得本轮。稍微懂得一些 PHP
声明的人就可以开发一些有用的东西。PHP 有更多的软件依赖,但是 PHP
的概念对于新手来说不那么繁琐。

  懂一些 JavaScript 和开发 Node.js 应用是两回事儿,Node.js
开发方法和大多数服务端技术不同,你需要先弄明白一些相当复杂的概念,比如关闭和回调函数。

Bruno:

我非常不同意这个观点。PHP的语法中的确有一些怪象,其中的很多已经被修复了,在新的版本中,还有很多要被移除。另一方面,JS中也有“this”这个问题~

关于bullet 3
(开发的时候,使用js你不需要在client端开发和Server端开发的时候做切换),我不同意这个观念。服务器环境和客户端的开发环境已经完全不通了,大脑中的切换还是需要的。总是有些新的语法你不能再浏览器中使用,反之亦然,所以这某种程度上也是语言的切换。

Bullet 4 (理解 JS 会让你更希望使用它)  这从某种程度上来说我是赞同的。
我在工作中使用 JS 和 PHP多年,使用 JS
的时间更久,但我对它却喜欢甚少——尽管那纯粹是个人倾向。

  第二轮:帮助和支持

  没有官方文档和资源(课程,论坛,堆栈溢出)的帮助你必将举步维艰。 PHP
在本轮轻易胜出,她有大量的指南和二十年的
Q&A。无论你想做什么,总会有人在你之前已经面对过同样的问题。

  Node.js 拥有很好的文档,但是更加年轻,能提供的帮助较 PHP
也少。JavaScript 在市面上的时间和 PHP
一样久,但是主要的帮助都是针对浏览器开发的,那基本没啥帮助。

James:

我爱 JavaScript。我知道它有它的怪癖,并且我知道一些原因,ECMAScript 2015
将会修改掉一些,并给语言带来一部分令人激动的新特性。JavaScript
是强有力和灵活的,并能适应很多不同风格的编程。与 PHP 对照,我享受使用
JavaScript。Node(Node.js)就是其中之一。

  第三回合: 语言语法

  声明与结构是不是符合逻辑而且简单好用?

  不像一些语言跟框架,PHP
不会限制你按特定的方式编写,具体怎么搞随你。你可以从几行的程序开始,然后添加些方法,进而写一些简单的
PHP4 模式的对象,最后编写优雅的面向对象的 MVC 模式 PHP5+
的应用。你的代码开始可能比较混乱,但也能工作,而且会随着理解的深入越写越好。

  PHP
的语法在版本间可能略有调整,但是向后兼容一般都做得很好。但不幸的是,这也导致了一个问题:PHP
很混乱。例如,怎么统计一个字符串中字符的个数?是 count?str_len? 还是
strlen?亦或 mb_strlen?PHP
有数以百记的函数,而且命名规则也也不完全一致。可以试试不查文档写几行代码。

  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 不是这样。

第四轮:开发工具

Round 4:考虑这两种技术所使用的开发工具,Node 因为有开发工具
npm,所以略胜一筹。

Bruno:

虽然,开发者最初受到 npm 的鼓舞,但是现在有 leaps 和 bounds 比 npm
用着更舒服,而且如果你在电脑上安装了同一个库的两个版本的话,leaps 和
bounds 不会让你的系统崩溃。而且相对于 npm 而言,leaps 和 bounds
允许设计者使用递归思想,而递归思想是如此的重要,以至于当开发者准备着手建立一个包管理器时,首先考虑的就是这一点。

npm 还有一个致命的缺点,我把它称为“开发者协作友好”,npm
不能很好地做到这点,对于 npm
而言只有开发者本身能够理解自己写的东西。最后,npm 与 Vagrant
不能很好地兼容,这直接的妨碍了您开始自己工作,就更别说 npm
不关注用户们的需求了。npm 有一个 bug 已经存在了很多年,它导致该软件在
windows 上基本不能使用,这可不算是小问题了。当然 PHP
也有很多愚蠢的错误,但是这些错误并不会与你的系统之间发生问题。

的确,PHP并没有自带编译器,但我不认为它应该这样做。这样的便利不应该由一个包管理器或者说是一个独立的应用来完成。如果将来有一天,有人为
Node
开发了一个很好的包管理器,把它与现有的编译器替换将会极其困难。让它相对独立,人们可以便于切换。此外,安装它仅需要在终端上输入一行代码,或者下载一个安装程序。
书中提到的编译器影响很小的说法,是显而易见的错误。自从PHP开发完成后,编译器就影响了每一位新加入进来的
PHP
开发者,他们中的一些佼佼者不得不将它添加到现有的流程中。只基于编译器存在之前就有很多
PHP
用户的理由,并不能说明它的作用较小。事实上,自从有了它,它就产生了巨大的影响。一些人所说的“对社区造成的影响很少“的言论根本没有事实依据。
现在,我不能在大多数 PHP 开发者都希望安装 Node
这个问题上争论,这是真的事实。可悲的是,很多好的工具都首先基于 Node
下开发,但我仍然希望就像 Node-free 开发环境一样,也可用于开发BowerPHP。

  第四轮:开发工具

 两种技术都有一些很好的编辑器,集成开发环境,调试器,验证器和其他工具。我认为这是平局,但是这里有一些工具给
Node.js 些许优势:NPM-包管理器。 NPM
允许你安装和管理依赖,设置配置变量,定义脚本和其他。

  PHP 的 Composer 项目受 NPM
激发,在有些方面更强。但是,PHP
在默认情况想不提供,活动库较小,在社区的影响更小。

  Grunt 和 Gulp 之类革新了开发方法的构建工具的壮大,NPM
也有一部分功劳。有时候 PHP 开发者也许想要/需要安装 node.js,这不是倒退。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图