原文链接:https://thinkmobiles.com/blog/php-vs-nodejs/
几乎每天都会出现一些新技术,这些技术正试图改变网络格局。Web开发的服务器端语言竞争十分强烈,Java,C和Perl等长期的重量级存在,以及Ruby,Clojure和Go等更加以Web为重点的语言出现。但是如何为您的项目选择一个完美的解决方案?我们将简单比较两种后端技术:PHP与NodeJS,我们希望不会引起语言的冲突,发动圣战。
首先,让我们定义PHP和Node.js. PHP 是一种服务器端脚本语言。它于1994年由Rasmus Lerdorf于1994年创建,主要用于Web开发。最初PHP代表个人主页,但现在它代表一个递归的缩写 – PHP:Hypertext Preprocessor。
通常,PHP由Zend Engine提供支持的解释器处理,该解释器安装在Apache和Nginx等Web服务器上。PHP代码也可以嵌入到HTML或HTML5标记中。这种灵活性促成了该语言的普及,现在PHP已经在超过80%的Web服务器上使用。
Node.js是一个开源的JavaScript运行时环境,用于在服务器端执行JavaScript代码。Node.js开发过程改变了主要在客户端使用JavaScript的范例。这就是为什么Node.js已经成为“无处不在的JavaScript”范式的基本元素之一。Node.js由Ryan Dahl于2009年创建。
Node.js 由Google的V8 JS引擎提供支持,这与Google Chrome网络浏览器中使用的引擎相同。这个JS运行时环境不需要单独的Web服务器或其他依赖项,有内置库可以处理它。与PHP相比,Node.js相对年轻,但它已经被微软,雅虎,LinkedIn和PayPal等大公司所熟知和使用。 为了更清晰的视图,这里是表格形式的流行度指标的PHP vs NodeJS比较:
PHP | NodeJS | |
发布日期 | 1995年6月8日 | 2009年5月27日 |
包的存储库(Dependency Manager) | Composer | NPM |
有LTS吗? | + | + |
许可证(免费用于商业用途) | PHP许可证 | MIT许可证 |
职位空缺/开发人员 | ~100 000/4000000 | 60000 / * |
packagist / npm上的软件包 | 152 453 | 〜45万 |
开源项目 | 290757 | 114353 |
有关stackoverflow的问题 | 1112866 | 187917 |
GitHub 加星 | 12 670 | 38 398 |
贡献者 | 485 | 1488 |
2016年最大型的开发者大会 | Laracon EU 2016 SymfonyCon柏林2016年 滑雪PHP会议2016 PHPBenelux会议2016年 SunshinePHP 2016 年PHP英国会议 |
JSConf Fluent dotJS FullStack ForwardJS JSFoo |
文档 | (php.net) | (nodejs.org) |
证明 | Zend Symfony官方认证 |
Node.js认证计划 |
PHP的好处
一些开发人员说PHP比Node.js更容易使用。他们的论点是:
- 为PHP配置开发环境更容易
- Node.js需要更多代码
- 为了在Node.js上编码,您必须了解回调函数和阻塞
- 所有互联网托管服务都支持PHP
- 支持更多框架和CMS
- 官方代码组织建议(PSR)
- PHP有一个更大的指令库和常见问题(20年内有很多)
- PHP开发人员社区是一个庞大而多样化的人群,他们不断重新构想和更新库,框架和其他PHP组件
当项目包括以下内容时,您应该考虑使用PHP:
- 即使只有一部分项目包括这些技术(例如博客,管理页面,在线商店等),WordPress,Drupal,Joomla等CMS技术也是如此。
- 如果您使用的是关系数据库 – 请使用PHP。
总结这个PHP与NodeJS比较的整个服务器端,PHP支持以下数据库管理系统:
- MySQL / MySQLi
- SQLite
- PostgreSQL
- Oracle (OCI8)
- Microsoft SQL Server
- Sybase
- ODBC
- mSQL
- IBM DB2
- Cloudspace
- Apache Derby
- Informix
- Ovrimos SQL
- Lotus Notes
- DB++
- DBM
- dBase
- DBX
- FrontBase
- filePro
- Ingres II
- SESAM
- Firebird/InterBase
- Paradox File Access
- MaxDB
- PDO
Node.JS的好处
NodeJS的主要优点之一是支持多线程。虽然它在浏览器中是必需的,但在Web开发过程中并不是那么需要它。 许多开发人员选择Node.js而不是PHP。原因如下:
- 内置服务器支持
- 网站的客户端和服务器端的单一语法。这提高了代码的可重用性,使整个堆栈开发人员的工作更容易
- 模块缓存 – 模块在第一次调用时下载并初始化,之后它们始终可用
- Stream模块可以更轻松地处理大型文件
- Node与JavaScript的语法几乎相同,因此很容易为JS开发人员学习和学习。
Chrome V8引擎
如前所述,Node.js由Chrome V8引擎驱动。该引擎是许多其他好处的来源。当您的项目包括以下内容时,您应该考虑使用Node.JS:
- 流式数据传输 – 传统的Web堆栈通常将查询和相应的HTTP转换为基本事件。但是,它们是数据流,Node.js应用程序可以利用它。这种数据流的一个很好的例子是在下载或不同层之间的数据传输期间的文件处理。
- NodeJS支持实时Web开发 – 这允许轻松开发在线聊天聊天、投注、Twitter等用于即时消息的应用程序或界面。但你必须要小心。因为响应时间可能不同,如果垃圾收集器发生干扰,他会停止执行程序。因此,不要尝试在NodeJS上开发具有保证响应时间的应用程序或系统。Erlang是这项工作的更好选择。
- 包含NodeJS的软件包,例如MEAN(mongoDB,Express.js,Angular.js,Node.js)
- 内置扩展功能(集群包)
以下是支持技术的PHP vs NodeJS比较表:
PHP | NodeJS | |
CMS | Magento,WordPress,Opencart,Drupal,Joomla,PrestaShop | Apostrophe2 ,Ghost ,KeystoneJS ,enduro.js,Pencilblue |
MVC框架 | Symfony,Laravel,Yii,Codeigniter,Zend,Phalcon,CackePHP | Koa JS,Express JS,Sails JS |
实时工具 | Ratchet, Wrench, Elephant.io, Socket.io | ws,Sockjs,Socket.io |
REST API | RestClient,Guzzle,HTTPFUL | Restify,Loopback |
脚手架 | symfony +,laravel +,yii +,CackePHP | Yeoman |
HTML模板 | Twig Blade Latter Smarty Volt Moustache |
Jade Underscore EJS Handlebars Moustache Embedded js |
水平扩展实现 | Elastic beanstalk, varnish | Cluster mode, Amazon Elastic Beanstalk |
负载平衡器支持 | + | + |
队列 | + | + |
多个驱动程序支持DB,存储 | + | + |
全文检索 | + | + |
调试分析 | Xdebug,Blackfire,XHProf,XHGui | 内置探查器 |
高速缓存 | Redis,Memcache | Redis,Memcache |
CI支持 | Travis CI,Codeship | Travis CI,Codeship |
QA测试 | PHPUnit Cucumber (behat) Atoum Selenium Dusk Kahlan Php_testability Codeception |
Phantom.js Jasmine Protractor Nightwatch.js Casper.js Nemo.js Buster.js Selenium |
基准
根据功能和优点选择PHP与Node.js的优胜者是个好主意。然而,为了更好的了解PHP与NodeJS的性能差异,我们创建了两个不同的测试用例,并将在同一台机器上运行它们。
测试台配置:
- VDS
- CPU – 1核心,2GHz
- RAM – 1GB RAM
- 存储 – 10GB SSD
- 操作系统 – Debian 8.6
- PHP 7.0.22 FPM
- Node.js 6.11.2
PHP与NodeJS – 第一次测试
此测试将向我们展示PHP和Node.js如何使用数组,字符串连接,网络I / O和算术。以下是PHP运行结果:
Node JS的结果:
正如您所看到的,PHP比Node.js更快:
- 字符串连接
- 填充数组
- 填充复合数组
- 读取文件
- MySQL查询
Node.js仅在数字相加比PHP快。
PHP vs NodeJS – 第二次测试
现在,我们将测试Node.js和PHP处理多线程任务的能力。我们将在1000个线程中向他们抛出1000个查询。别看测试代码,所有配置都是在服务器端完成的。 Nginx 11.7 + PHP 7.1.1 FPM与Node.js。以下为NodeJS的结果:
PHP的结果:
第二个测试已经结束,结果PHP再次胜出:
- PHP + Nginx – 32毫秒
- NodeJS – 200毫秒
直观来说,PHP能够每秒处理31,250个查询,而Node.js可以处理每秒5,000个查询。
结论
PHP几乎赢得了PHP与NodeJS比较的所有类别。PHP更受欢迎且更易于学习,同时也支持大量编程语言高级特性和技术,有非常多的来源可以获得帮助,部署过程比Node.JS容易得多。
但是,不要贬低Node.JS。尽管学习曲线陡峭,但它有一些非常重要的优势。在AJAX和HTML5的帮助下,您可以创建非常高效的应用程序,一旦代码被缓存,继续传输的唯一内容就是数据。
Node.js 和 PHP 战斗的结果是相辅相成的,因为这两种技术都有各自的优点和缺点。这大多是相似的情况在比较或选择用于 Web,桌面和移动开发的其他技术时。Node.js 有前途,并且肯定会占据PHP市场的一部分,但是不能完全取代 PHP。
Node.js 和 PHP 之战,你更偏向谁?
