热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP对战Node.js:一场关于开发者喜好的史诗级战役

这是一个旧日支配者与新兴崛起者间相爱相杀的故事——服务器端Web堆栈的两位好战友如何走向兵戎相见。

这是一个旧日支配者与新兴崛起者间相爱相杀的故事——服务器端Web堆栈的两位好战友如何走向兵戎相见。

整个故事正如好莱坞大片的经典剧情走向:两位昔日好友如今分道扬镳,甚至被迫陷入了你死我活的斗争当中。刚开始的分歧并不严重,无非是一位老友对于另一位伙伴长久以来占据、但又绝口不提的业务领域产生了点兴趣。而在现实版的这场编程语言决斗大电影中,Node.js成了那位成了好兄弟反目成仇的导火索,并由此引发一场势均力敌、旗鼓相当的大战:PHP与Javascript,双方曾一度携手统治整个互联网世界,但如今却为了争夺开发人员的支持而向对方痛下杀手。

遥想当年,合作关系总是简单而纯粹。那时候Javascript负责处理浏览器上的细枝末节,而PHP则管理着存在于端口80与MySQL之间的全部服务器端任务。当时双方保持着愉悦的合作心态,并不断为互联网旗下的各种关键性部件提供支持。无论是WordPress、Drupal还是Facebook,缺少了PHP、人们在网络中几乎一分钟也待不下去。

然而某位机灵的技术人员发现了一个惊人的秘密:Javascript也完全能够运行在服务器之上。几乎在一夜之间,我们似乎根本用不着借助PHP的力量来打造下一代服务器堆栈了。单凭一种语言,我们已经能够构建起Node.js以及其它各类运行在客户机上的框架。“Javascript无处不在”甚至成为一部分开发人员的工作信仰。

当然,这个故事的结局还没有敲定。对于每一位到处宣扬Node.js先进性以及Javascript便捷性的开发人员来说,总有跟自己作对的家伙存在——他们更倾向于PHP深邃的代码基础以及长期稳定的实际表现。那么这位旧日支配者能够在自己多年盘踞的服务器端主场上击溃挑战方吗?Javascript又是否会无情地推翻自己的老朋友,完成自己的天下一统野心?请大家拿起手中的爆米花桶与可乐,共同观看这场精彩纷呈的同室操戈好戏。

PHP胜出:代码与内容混合

大家在输入的过程中当然希望能将自己的思路直接转化为网站的文本内容,同时还要为进程添加分支、一部分ifthen语句以保证站点拥有漂亮的视觉效果,具体取决于URL中的某些参数。又或者,我们希望能够利用单一数据库将文本或者数据加以混合。在PHP的帮助下,大家只需要打开魔法般的PHP标签,几秒之内即可开始编写代码。是的,不需要任何模板——因为一切都已经从属于模板了!也用不着使用额外的文件或者复杂架构,可编程逻辑的强大力量就在我们的指尖、等待着各位的调遣。

Node.js胜出:关注点划分

将代码与内容加以混合像一把神奇的拐杖,虽然开始能够很好地引导使用者、但最终却往往变成沉重的负担。诚然,将代码与HTML混合在一起确实相当有趣——至少前几次体验时是如此。但很多我们的代码库就会变成一大堆逻辑相互杂糅的乱麻。真正的程序员会向其中添加结构,并把修饰层从逻辑层当中划分出来。很明显,新手开发人员能够借此对项目拥有更清晰的认识,也更易于完成后续维护工作。运行在Node.js之上的各类框架正是由这样一群程序员们所打造,他们很清楚当模型、视图以及控制器得到明确划分之后,生活会变得更加美好。

PHP胜出:深邃的代码库

整个网络世界充斥着大量PHP代码。用于构建网站的各类主流平台(包括WordPress、Drupal以及Joomla等等)都是由PHP语言所写就。除了这些平台之外,大部分相关插件同样以开源代码的形式存在。总而言之,PHP代码可谓唾手可得,等待着大家对其进行下载、修改并根据需要灵活运用。

Node胜出:新生代码意味着现代功能

不可否认,成千上万的开源PHP文件确实能帮助大家更轻松地完成项目开发,但其中也有不少已达八岁高龄的WordPress插件等待并盼望着开发人员将其下载并加以运用。谁愿意用几小时、几天甚至几个礼拜时间对这些多年未曾更新的代码进行调试?至少我不愿意。Node.js插件不仅更加年轻,而且也享受到了最新架构方案所带来的种种便利。开发这部分代码的程序员们非常清楚,现代Web应用程序应当为客户端引入更多智能化元素。

PHP胜出:便捷性(或多或少吧)

PHP语言在使用过程中并没有太多可说的:几种变量再加上由字符串与数字构成的基本函数就是它的一切。这是一套非常专注的解决方案,用户所期望的仅仅是利用它将数据由端口80移动至数据库及后端当中。PHP没有太大的野心,能很好地完成这项任务就是它的天职。现代数据库不啻为一类奇迹般的工具,因此我们大可以将各类沉重的负载交给它负责处理。PHP是一种复杂程度适中的处理手段,我们根本没必要刻意让它变得难以使用。

Node胜出:闭包复杂性等

Javascript在使用中的一些小别扭可能会令某些开发人员抓狂,但总体而言这是一套现代编程语言、其中包含大量现代化语法加上以闭包为代表的一系列实用特性。大家可以轻松对其进行重新配置与扩展,从而使jQuery等强大的库成为可能。我们用不着为对象之类的功能而心烦。为什么要跟自己过不去呢?

PHP胜出:不需要客户端应用

大家都说,如果能在浏览器以及服务器上使用同一种语言,那么实际效果肯定是最好的。但如果我们根本用不着在浏览器上使用任何语言,结果岂不是更理想?如果我们能够直接以HTML格式实现数据输出呢?浏览器能够直接接纳这些数据,而且用不着忍受Javascript线程尝试利用几十次Web服务调用在浏览器上创建页面所引发的各类麻烦与故障。纯HTML往往比其它形式拥有更出色的运行效果,而PHP恰恰针对此类创建任务作出了全面优化。为什么要费心把Javascript引入浏览器当中?在服务器上构建一切,并尽量避免把过于繁重的任务交给小手机上的小浏览器打理,这才是正确的解决思路。

Node胜出:服务调用比臃肿的PHP HTML调用更为精简

尽管AJAX常常将大量活动部件塞进HTML 5 Web应用当中,但它们确实很酷——而且极具实效优势。一旦Javascript代码进入浏览器缓存,需要在网络线路间往来传输的就只剩下新数据了。在这里我们不需要面对成吨的HTML标记,而且无需重复下载整个页面内容。只有其中的数据会发生变化。如果大家愿意花点时间来创建一款精致的Web应用程序,那么它绝对能给各位带来理想的回报。Node.js针对数据交付机制作出了深入优化,而且数据只需要提供给Web服务。如果大家的应用程序非常复杂而且充斥着大量数据,那么Node.js无疑为信息的有效传递建立起良好的基础。

PHP胜出:SQL

PHP的设计思路本身就考虑到了与MySQL及其多种变体——例如MariaDB——的共存协作需要。如果MySQL不足以应对大家的实际需求,那么还有更多来自甲骨文及微软的其它卓越SQL数据库可供我们选择。我们的代码能够在经过简单的发动下转化为查询指令。广阔的SQL世界可谓一望无际,而且其疆域仍在不断拓展当中。相当一部分稳定性最出色、开发水准最高的代码都会与SQL数据库进行对接,这意味着所有这些强大的能力最终将能被轻松集成到PHP项目之内。也许整套生态系统还称不上完美而又和谐的家族,但其可观的规模却绝对不容否认。

Node.js胜出:JSON

如果大家必须接入SQL,那么Node.js也提供相关库来完成这项任务。但除此之外,Node.js还能与JSON互通,这套通用方案能够与众多最新NoSQL数据库实现交互。这并不是说我们没办法在自己的PHP堆栈中获得JSON库,但在将JSON与Javascript配合使用时、往往能够带来简单便捷的任务处理流程。通过这种方式,我们能够保证从浏览器到Web服务器再到数据库全部使用同一种语法,其中冒号与括号的使用方式及作用完全相同。这将帮助大家在节省开发时间之余,显著降低代码编写时的挫败感。

PHP胜出:编码速度

对于大部分开发人员而言,利用PHP编写Web应用程序往往能够得到更为高效的编码体验:用不着编译器、无需部署、更不用提JAR文件或者预处理机制——只需要利用自己最喜爱的编辑器以及目录中的部分PHP文件,开发工作就能水到渠成。各位的实际开发流程也许有所不同,但说起快速搞定项目的神兵利器,PHP在这场内斗中绝对是当仁不让。

Node.js胜出:原始速度

如果从代码本身的大括号与小括号数量角度来看,编写Javascript代码的难度确实更高一些,但在开发工作结束后、Node.js代码的运行速度却极为惊人。回调机制的引入堪称天才之举,因为这能大大节约我们处理不同线程的时间。代码的核心构建良好而且专门设计用于实现我们的实际需要。这不正是每一位开发人员梦寐以求的效果么?



推荐阅读
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • NPM 脚本 'start' 退出,未显示 create-react-app 服务器正在监听请求
    遇到 NPM 脚本 'start' 退出且未显示 create-react-app 服务器正在监听请求的问题,请求帮助。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • PostgreSQL 与 MySQL 的主要差异及应用场景分析
    本文详细探讨了 PostgreSQL 和 MySQL 在架构、性能、功能以及适用场景方面的关键差异。通过对比分析,帮助读者更好地理解两种数据库系统的特性和优势,为实际应用中的选择提供参考。 ... [详细]
author-avatar
The-6ixth-Floor乐队
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有