这是好莱坞的经典情节:两个老朋友之间的斗争,他们走了不同的路。 通常,摩擦发生在一个朋友激发了对另一个朋友一直未说过的领域的兴趣时。 在这部电影的编程语言版本中, Node.js的引入使伙伴之间的摩擦变得into恼:PHP和JavaScript ,这两个曾经共同统治了互联网,但如今却被开发者广泛使用的合作伙伴。

在过去,这种伙伴关系很简单。 JavaScript在浏览器上处理的细节很少,而PHP管理端口80和MySQL之间的所有服务器端任务。 这是一个快乐的联盟,继续支持互联网的许多关键部分。 在WordPress,Drupal和Facebook之间,如果不使用PHP,人们几乎无法上网。

[ 小心! 每个开发人员都应避免的8个职业陷阱 。 • 要成为一名真正的软件开发人员,必须阅读7本书 。 • 即使是经验丰富的开发人员,也会犯15个菜鸟错误 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

然后,一个聪明的孩子发现他可以在服务器上运行JavaScript。 突然之间,不需要使用PHP来构建下一代服务器堆栈。 构建Node.js和在客户端上运行的框架只需要一种语言。 “ JavaScript无处不在”成为某些人的口头禅。

自从发现以来,JavaScript爆炸了。 Node.js开发人员现在可以在不断扩展的优秀框架和脚手架之间进行选择:React,Vue,Express,Angular,Meteor等。 清单很长, 最大的问题是在出色的选项之间进行选择。

有人将Node.js的蓬勃发展视为JavaScript取得决定性胜利的证据,并且有大量原始数据可以支持这种观点。 GitHub报告说, JavaScript是其存储库中最受欢迎的语言 ,并且JavaScript的表亲TypeScript也正在Swift增长。 许多最酷的项目都是用JavaScript编写的,许多最受欢迎的#标签都引用了它。 同时,PHP在该排名中已从第三位滑落到第四位,并且在新闻稿,产品推出以及其他市场紧要时刻的滑倒率甚至更高。

但是炒作逐渐消失,软件可以持续使用数十年。 大多数PHP代码库都不会迁移,并且会继续提供我们每天阅读的大部分文本。 据估计,我们查看的页面的40%以某种形式开始于PHP。 部分原因是因为PHP继续获得新生。 在最近几年中,运行PHP的系统的全部内容已被完全重写。 它不是运行您祖父母网站的PHP代码。

借助Node.js革命所采用的相同智能技术,PHP的快速,及时的编译器以比以往更快的速度提供答案。 现在, PHP 7.2和HHVM提供了V8引入Chrome和Node.js的许多相同的实时优化。 不仅如此,HHVM还拥有Hack (聪明的PHP方言) Hack ,它为lambda,泛型和集合等复杂的编程功能提供全面支持。 因此,如果您需要这些功能,则无需搜索功能更全的堆栈。

当然,结局还没有写。 对于每个对Node.js的纯净和年轻,以及JavaScript的简单性不满的程序员,还有另一个人对PHP的深厚代码基础和人们长期以来理解的稳定性感到满意。 旧的编码器会击败服务器端的新贵吗? JavaScript是否会推翻老朋友以取得世界统治地位? 将另一批爆米花放入微波炉中,然后坐下。

PHP胜出之处:将代码与内容混合

您正在键入内容,将思想注入网站的文本中,并且想要向该过程添加一个分支,添加一个if-then语句使它看起来很漂亮,例如,取决于URL中的某些参数。 或者,也许您想混入数据库中的文本或数据。 使用PHP,您可以打开神奇的PHP标签并在几秒钟内开始编写代码。 无需模板-一切都是模板! 无需额外的文件或复杂的架构,仅需唾手可得的可编程后勤功能。

Node胜出的地方:分离关注点

将代码与内容混合在一起可能会导致您瘫痪。 当然,在开始的前两到三次将代码与HTML混合在一起很有趣。 但是很快,您的代码库就变成了混乱的逻辑。 真正的程序员会添加结构,并将修饰层与逻辑层分开。 它使新程序员更容易理解和维护。 在Node.js上运行的框架是由程序员构建的,他们知道,将模型,视图和控制器分开时,生活会更好。

PHP成功的地方:深入的代码基础

Web上充满了PHP代码。 用于构建网站的最流行的平台(WordPress,Drupal,Joomla)是用PHP编写的。 平台不仅是开源的,而且大多数插件也是开源的。 到处都有PHP代码,它在等待您下载,修改和使用以满足您的需求。

Node胜出之处:更现代的功能

当然,有成千上万个很棒的开源PHP文件,但是其中一些是12岁的WordPress插件,希望并祈祷有人下载它们。 对于Symfony的每个现代版本,都有一个尘土飞扬,被遗忘已久的库,没有人进行更新。

谁愿意花数小时,数天或数周的时间浏览多年来未更新的代码? Node.js插件不仅更新,而且是在充分了解最新架构方法的情况下构建的。 它们是由了解现代Web应用程序应将大多数智能推向客户端的程序员所构建的。

尽管JavaScript具有许多小的特质,但它们在某种程度上引起了疯狂,但在很大程度上,它是一种现代语言,具有现代语法和一些有用的功能,例如闭包。 您可以轻松地重新配置和扩展它,从而使强大的库(如jQuery)成为可能。 您可以像对象一样传递函数。 为什么要限制自己?

PHP胜出的地方:简单性(多种)

PHP并没有太多内容:一些用于处理字符串和数字的变量和基本函数。 这是一个薄层,除了将数据从端口80移到数据库再移回数据库之外,它并没有做其他事情。 那就是应该做的。 现代数据库是一种神奇的工具,将繁重的工作留给它是有意义的。 对于应该不复杂的工作,PHP是适当的复杂程度。

再说一次,如果您是一个程序员,除了想与数据库交互并格式化结果之外,还想做更多的事情,那么现在可以用PHP来做更多的事情,而不用费劲。 Facebook的HHVM增加了对Hack的支持,Hack是一种充满现代功能的完整语言,例如类型注释,泛型和lambda表达式。 使用此功能将您的代码限制为仅在HHVM上运行,但这并不是世界上最糟糕的事情。 非常快。

Node胜出的地方:数十种语言选择

如果PHP用户乐于获得Hack的访问权限,则应考虑迁移到Node.js的世界,因为许多主要语言都可以交叉编译以在JavaScript中运行。 有一些知名的选项,例如Java,C#或Lisp,还有许多其他选项,例如Scala,OCaml和Haskell。 甚至还有送给BASIC或Pascal怀旧爱好者的礼物。 Jeremy Ashkenas的可编译为JavaScript的语言列表非常全面。 另外,JavaScript表亲(如TypeScript和CoffeeScript)为同一游戏提供了略有不同和改进的方法。

PHP胜出之处:无需客户端应用

关于在浏览器和服务器上使用相同语言的所有讨论都很好,但是如果您不需要在浏览器上使用任何语言怎么办? 如果以HTML格式发送数据怎么办? 如果您要构建一个斯巴达式的静态网站,以在没有交互式功能的情况下严格交付所需内容,该怎么办? 浏览器会弹出它,并且不会因尝试启动JavaScript线程而产生的头痛或小故障,JavaScript线程试图通过两个Web服务调用在浏览器上创建页面。 纯HTML比其他任何事物的工作频率都更高,并且PHP已对其进行优化以创建它。 为什么要在浏览器上使用JavaScript? 在服务器上构建所有内容,并避免在小电话上加载该小浏览器。

Node胜出的地方:服务调用比HTML胖的PHP调用更瘦

尽管疯狂的AJAX 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胜出之处:编码速度

对于大多数开发人员而言,为Web应用程序编写PHP感觉更快:没有编译器,没有部署,没有JAR文件或预处理器-仅仅是您喜欢的编辑器和目录中的一些PHP文件。 您的工作量会有所不同,但是要快速将项目捆绑在一起,PHP是一个很好的工具。

Node.js的优势所在:应用程序速度

当您计算大括号和括号时,编写JavaScript代码会有点困难,但是完成后,Node.js代码可以运行。 回调机制非常出色,因为它使您免于使用线程。 核心经过精心打造,旨在为您完成所有这些工作。 这不是每个人都想要的吗?

PHP获胜的地方:竞争

PHP开发人员的心灵之战仍在进行中。 HHVM团队和Zend团队正在努力为每个人提供快速代码。 独立的基准正在出现,每个人都在将代码库推向极限。 这仅意味着更好的性能。

Node.js赢得胜利的地方:团结

您是否真的想要两个不同的代码库? 当然,竞争会有所帮助,但很快就会出现分裂。 当您的代码仅在两者之一上运行时,会发生什么? 如果您不得不花费数周或数月来重写代码,那么竞争将无济于事。 虽然几年前Node.js经历了自己的崩溃,但随着io.js的发布, Node.js领域又重新融合了起来 ,这给了PHP开发人员可能渴望的那种语言团结。

PHP胜出之处:基本应用

在过去的几年中,一些开发人员启动了Web应用程序,并发现自己对这种缓慢的行为感到沮丧。 驱动所有这些活动片段JavaScript可能是数万个字节,有时甚至是数十万个字节。 当所有数据包到达时,必须对其进行解析,编译和最终执行-所有这些都必须传递一些字节,例如温度和预报。

可以在构建静态网站生成器的团队(本文中为463 )和AMP格式的精简网页中找到针对这种roccoco精神错乱的反弹。 对于希望将智能集中在服务器上的所有团队来说,PHP是自然的选择,这样就不会使客户端负担过重。

Node.js的优势所在:丰富性

建筑设计师Ludwig Mies van der Rohe曾说过:“少了更多。” 另一位建筑师罗伯特·文图里(Robert Venturi)出现并反驳说:“少就是无聊。” 智能手机比装满Cray电脑的房间功能更强大。 台式机具有带多个风扇的视频卡,以使它们在所有处理过程中保持凉爽。 为什么我们要剥夺我们的代码并像斯坦贝克小说那样像大萧条时代的受害者一样生活? 狂欢一场。 充满JavaScript代码的大型,光滑网站令人瞩目,引人注目,并且最有趣的是。 当然,在少数几位数据上浪费这么多带宽是一种淫秽的想法,但是带宽从来没有像现在这样便宜过。 坚持一下!

双赢的地方:无头

“无头”一词是指在服务器上运行的PHP代码。 最近,一些顶级的PHP应用程序(例如Drupal)已经跨过通道,并且被JavaScript框架(如React,Angular或Vue)构建的复杂用户界面所震惊。 他们没有尝试与他们竞争,而是让他们放弃了对客户端的控制,并专注于在服务器的后端上做得很好。

如果您对在服务器上运行的PHP代码进行了大量投资,则这可能是同时享受这两种方法中最好方法的一种方式。 已建立的旧PHP代码充当了数据库的大门,仔细检查了请求,清理了数据,并通常提供了所有业务逻辑。 客户端是使用最新JavaScript框架编写的渐进式Web应用程序。 当需要信息时,它会向PHP代码发送一个AJAX请求。

对于从头开始的人来说,这可能没有意义,但是如果您已经依赖PHP多年并且想要逐步前进,那么这可能是一个令人愉快的妥协。

双赢的地方:微服务和无服务器

不断上升的微服务或无服务器范例为JavaScript和PHP代码提供了一种与服务器同居并相处的方式。 两种解决方案都将工作分解为数十个较小的服务或功能,并且这些服务或功能可以独立运行并保持正常运行。 某些部分(通常是应用程序的较旧和最稳定的部分)可以运行PHP。 其他部分(通常是较新的部分)将用Node.js编写。 POSTGET的语言可以是将它们结合在一起的通用语言。

From: https://www.infoworld.com/article/3166109/nodejs-vs-php-an-epic-battle-for-developer-mindshare.html

Node.js与PHP:一场针对开发人员思想共享的史诗般的战斗相关推荐

  1. Html node.js开源项目,2020年面向开发人员的十大NodeJS框架

    Node.js 是一个基于 Chrome V8 引擎的,开源的,跨平台的 JavaScript 运行环境.事件驱动的.非阻塞 I/O 模型使 NodeJS 框架 能够开发极其轻便且高效的 Web 应用 ...

  2. 70万行代码、历时20年,一名开发人员写出的史诗般的计算机程序

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 编译丨核子可乐.Tina 来源丨InfoQ(ID:infoqchina) "开发到死,永不停更 ...

  3. (附源码)Node.js图书管理小程序的开发 毕业设计 250858

    Node.js图书管理小程序的开发 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在图书馆管理 ...

  4. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(一)

    这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...

  5. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)

    前篇 使用React.Node.js.MongoDB.Socket.IO开发一个角色投票应用的学习过程(一) 使用React.Node.js.MongoDB.Socket.IO开发一个角色投票应用的学 ...

  6. Egg Node.js 从小工坊走向企业级开发 #20

    Egg & Node.js 从小工坊走向企业级开发 #20 在 台灣 JSDC2017 開發者年會 和 IMWebConf 2017 的分享 Slide : 「Egg & Node.j ...

  7. node.js入门 - 7.异常处理与多进程开发

    node.js入门 - 7.异常处理与多进程开发 参考文章: (1)node.js入门 - 7.异常处理与多进程开发 (2)https://www.cnblogs.com/softlover/arch ...

  8. 使用Node.js的Express框架搭建和开发项目

    在搭建项目前,需要安装node.js,npm node.js安装方法 ,npm安装方法 接下来我们来创建express项目 1.选择项目安装目录 假如选择D:\projects\node\blog作为 ...

  9. 针对付费的百度文库用冰点_9个针对开发人员的付费技术写作程序

    针对付费的百度文库用冰点 As a developer, you're working on some framework (if you are a JavaScript developer the ...

最新文章

  1. 大数据入门基础系列之初步认识大数据生态系统圈(博主推荐)
  2. CC框架实践(1):实现登录成功再进入目标界面功能
  3. 解决使用百度UEditor编辑器后移动端图片被拉伸问题
  4. Python的内建属性和内建函数
  5. springboot 监听所有异常_SpringBoot——目前Java开发最流行的框架(一)
  6. And Design:拓荒笔记——Form表单
  7. Hadoop1——创建虚拟机
  8. java 引用 判断_[JAVA基础]你知道Java的四种引用类型吗
  9. 训练和测试自己的图像集
  10. linux 应用程序 死锁,程序死锁了
  11. Spyder中文版补丁下载及安装
  12. 从零快速搭建自己的爬虫系统
  13. ICPC 2022西安回顾
  14. 小地鼠偷吃萝卜(模板)
  15. 图片打开太暗看不清并且手机传给电脑的视频打开卡
  16. Flutter Container 组件
  17. java吃货联盟app讲解_Java吃货联盟订餐系统代码实例
  18. HTC Ubuntu 解锁
  19. vue商城:商品规格数据处理
  20. if-else 语句优雅处理

热门文章

  1. Ubuntu//Fedora 老版本下载(Old Releases)
  2. 不要24小时都想念同一个人_52jdss 经典说说
  3. c#winform文本文件的读写
  4. 个人学习笔记——Javascript基础学习---DOM基础(阶段总结)
  5. (可用)SOX 支持mp3格式转换
  6. 可能改变人生的五句话
  7. android webpage err_unknown_url_scheme
  8. 数学建模森林着火问题Matlab,数学建模森林救火问题.doc
  9. 小程序如何引入阿里图标。
  10. 【图解计算机网络】物理层和MAC层的亲密关系