PHP vs Node.js 之争由来已久,前者用于动态网页开发,后者是用来编写高性能网络服务器的 JavaScript 工具包,到底他们如何?InfoWorld 测试中心的 Peter Wayner 日前撰文指出两者的优势所在,不妨一看。
以下为译文:
这是典型好莱坞情节:分道扬镳的两位老朋友间的战斗。摩擦经常开始于一位对另一位不言而喻的领域感兴趣。这部电影的编程语言版本是 Node.js 的引入将好友情节变成一场旗鼓相当的比赛。PHP 和 JavaScript,两个曾经一起统治互联网的合作伙伴现在为了开发者心中的份额开始一决雌雄。
在过去,他们的合作关系很简单。JavaScript 处理浏览器上的小细节,PHP 处理所有的存在于 80 端口和 MySQL 的服务器端任务。这个幸福的联合不断支持着因特网的许多关键部分。在 WordPress、Drupal 和 Facebook 上,人们几乎不会离开 PHP 一分钟。
但是,后来一些聪明的孩子发现他能使 JavaScript 运行在服务器上。突然,我们发现没必要使用 PHP 构建下一代服务器栈了。一种语言就足够建立 Node.js 和运行在客户端的框架。对一些人来说,“JavaScript 无处不在”变成了咒语。
当然,结局并没有写完。相比较与吹嘘 Node.js 的纯粹和 JavaScript 无处不在的简单的程序员,还有另外的程序员,他们对深度代码库和了解 PHP 的稳定性感到满意。怪老头能够击退服务器端新贵吗?JavaScript 能推翻它的老朋友,实现统治世界吗?我们在微波炉里再抓一把爆米花,坐下来瞧瞧。
PHP 赢在何处:混合内容的代码
你正在打字,想法随之变成你网站中的文本。你想为进程添加一个分支,根据 URL 的一些参数,一点 if-then 语句就会使它看起来漂亮。或者可能你想从数据库中加入文本或数据。用 PHP,你能打开 PHP 魔法标签在几秒内开始编写代码。不需要模板——一切都是一个模板。不需要额外的文件或者煞费苦心的体系结构,因为可编程逻辑能量就在你的指尖。
Node 赢在何处:分离的内容
混合内容的代码是拐杖,最终会使你受到损害。当然,在最初的两到三次,混合 HTML 代码是有趣的。但是不久,你的代码库乱成一团。真正的程序员添加结构,从逻辑层分离出装饰层。对新的程序员来说,代码很容易理解清楚,便于维护。运行在 Node.js 的框架由这样的程序员所建,他们知道当模型,视图和控制器分离时,生活会变得更好。
PHP 赢在何处:深的代码库
网络充满了 PHP 代码。最受欢迎的构建网站平台(WordPress、Drupal 和 Joomla)都是用 PHP 编写。不仅这些开源平台,大部分他们插件也是用 PHP 编写。网上到处有 PHP 代码,它等着你去下载、修改和为你所用。
Node 赢在何处:新的代码意味着更多现代特征
当然,网上有数以千计的开源 PHP 文件,但是一些是 8 岁的 WordPress 插件希望、祈祷有人下载它们。有谁愿意去花费几个小时、几天或者是几周的时间去倒腾那些已经好几年没有更新的代码?Node.js 插件不仅是新的,而且用最新体系的完整知识构建而成。
PHP 赢在何处:简单(在一定程度上)
PHP 中没有太多的东西:几个处理字符串、数字的变量和基本函数。它除了把数据从 80 端口移动到数据库并返回,不会做的太多。这是应该做的。现代数据库是个神奇的工具,它能离开重的负载。对不应该复杂工作,PHP 的复杂度是适量的。
Node 赢在何处:闭包和更多的复杂性
JavaScript 可能会有许多把一些人逼疯的小特质。但在大多数情况下,它是一个娱乐现代语法的现代语言,有几个有用的特征,比如闭包。你能容易地重新配置和拓展它,使强 大的函数库像 jQuery 成为可能。你能像传递对象一样四处传递函数。为什么限制你自己呢?
PHP 赢在何处:不需要客户端应用程序
所有的关于在浏览器和服务器上使用相同的语言的讨论是好的,但是如果你不需要在浏览器上使用任何语言呢?如果你运送 HTML 表单中数据呢?浏览器弹出,不会出现被未启动的 JavaScript 造成的令人头疼的事情和小故障,这个 JavaScript 试图在浏览器上创建一个来自二十多个 web 服务调用的页面。纯粹的 HTML 比其他东西工作更频繁,而 PHP 是最优化去创建 HTML。为何费心在浏览器上用 JavaScript 呢?在服务器上建立所有操作,避免小手机上的小浏览器重载。
Node 赢在何处:与 HTML-fat PHP 调用相对的瘦服务调用
虽然 AJAX-crazy HTML5 Web 应用程序有许多移动部件,他们很酷,非常有效。一旦 JavaScript 代码在浏览器缓存中,新数据沿着线路移动。这没有大量的 HTML 标记语言,不重复地去下载整个页面。只有数据改变了。如果你愿意投入时间创建一个平滑的浏览器端 Web 应用程序,这将会有不错的报酬。Node.js 是最优化地去传送数据,仅仅只有数据通过 Web 服务。如果你的应用程序是复杂而又数据丰富的,这将是有效传送的良好基础。
PHP 赢在何处:SQL
PHP 与 MySQL 和它的许多变体,比如 MariaDB。如果 MySQL 不全是正确的,还有其他的来自 Oracle 和 Microsoft 的伟大的 SQL 数据库。你的代码用很少的改变就能转换成你的查询。广阔的 SQL 世界没边界。一些最稳定,成熟的代码与 SQL 数据库连接,意味着所有力量也能容易地被整合到 PHP 项目中。它可能不是完美幸福的家庭,但它是大的。
Node.js 赢在何处:JSON
如果你必须接入 SQL,Node.js 的函数库可以做到。但 Node.js 也有 JSON,一个与许多最新 NoSQL 数据库交互的通用语言。这并不是说你不能为你的 PHP 栈获得 JSON 库,但当使用 JavaScript 时有些流体可使用 JSON 的简单性去处理。这是从浏览器到 Web 服务器,再到数据库的语法。冒号和花括号在每处的作用相同,这节约了你的时间。
PHP 赢在何处:编码速度
对大多数开发者,编写 PHP Web 应用程序感到更快:没有编译器,没有部署,没有 JAR 文件或者预处理器——仅仅是你喜欢的编辑器和一些 PHP 文件目录。你的进度会不同,但就一起迅速确定项目而论,PHP 是一个很好用的工具。
Node.js 赢在何处:原始速度
编写 JavaScript 代码的过程中,当你在计算花括号和圆括号时,它有点难,但是编写成功后,你的 Node.js 代码可以飞。它的回调机制很巧妙,因为能帮你节约运行线程的时间。核心被建好,旨在为你做一切,这不是每个人想要的吗?