想成为一名Web开发者?你应该学习Node.js而不是PHP

简介:

3OpdV3RwSiwjrq6u_fZF.jpg

“PHP 是最好的语言!”这个段子曾非常流行。PHP 也曾一度是 Web 开发领域最受欢迎的语言。而 HTML5、AJAX、WebSocket 等技术所推动的 Web 2.0 变革,以及 Google 推出的 V8 引擎所带来的 JavaScript 的巨大性能释放,Node.js 已经势不可挡,在 Web 2.0 时代傲视群雄。而 PHP 则逐渐式微,开发者数量不断萎缩。想在 2018 年成为一名 Web 开发者?本文将从就业前景和技术两个方面讨论,为什么要选择学习 Node.js 而不是 PHP!

我经常被我的学生们问到的最常见的问题之一是,“为什么你在课程中教授 Node.js 而不是 PHP?” 我告诉他们,“相信我,我在行业内工作”显然不够。因此,本篇就是我在课程中包含 Node.js 的原因,以及如果你想要成为一名开发者,你应该抛弃 PHP 的原因。尽管我用这两种语言作为一个例子,但我会在本文中向你展示一个框架,用来决定你应该在接下来的开发生涯中学习哪些工具、编程语言、框架以及代码库。

作为一名开发者,你的时间和资源是有限的,你必须决定将你的时间投入到哪些语言和工具中,从而获取最大回报。

现在,你最好问自己一个问题:我能将时间和精力投入到哪些学习上,才能在未来的开发事业中获得知识、薪资和满意度方面的最大净值?

这并不意味着选择最容易的路径。这意味着选择一些工具,使你能够在接下来的许多年中保持竞争力的同时,提升你的技能,从而使你成为一名 高级开发人员。

在本文的结论部分,你会发现所有我所推荐的 2018 年的技术,如果你想要成为一名 Web 开发者的话。 因此,如果你实在急不可耐,可以直接跳到本文末尾。否则,请抓住这次千载难逢的机会,开启一段冒险之旅。

我们会在本文中使用两种类型的分析:就业前景分析技术分析。下面就是具体内容。

Node.js vs PHP — 就业前景分析

我们会这个分析中使用 Stackoverflow 开发者调查数据和 LinkedIn 数据。我们也将只聚焦 Web 开发相关的技术。

 流行度:

在排行榜中,JavaScript 连续 5 年是最常用的编程语言。Python 的使用 5 年内首次超过 PHP。那么 Node.js 是什么情况呢?Node.js 是一种 JavaScript 运行时环境。通俗点讲,Node.js 是一种使用 JavaScript 的方式,就像你在服务器端使用 PHP 那样。因此,在本文中,你可以将 Node.js 当作 JavaScript。

640 (3).jpg

640 (4).jpg


你可以看到,Node.js 和 JavaScript 排在首位,而且明显比 PHP 流行。

在过去 5 年中,Stackoverflow 从开发者调查中收集数据,发现 JavaScript 和 Node.js 之类的语言的流行度在增加,而像 PHP 之类的语言的使用情况在萎缩:gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAA

640 (5).jpg

React 最受开发者喜爱,然而,Node.js 是开发者最想要掌握的,而且是第二受喜爱的。

640 (6).jpg

640 (7).jpg

薪资待遇和工作机会:

考虑到拥有的开发经验,使用下表中蓝线以上语言(例如 Go、Rust 和 Clojure)的开发者的薪资相对较高,而使用蓝线以下语言(例如 PHP)的开发者的薪资相对较低。表中圆圈的大小表示该语言相对于其它语言来说的使用者数量。PHP 开发者的薪资明显更低且他们的开发经验年限更少。gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAA

640 (8).jpg

在 LinkedIn 招聘,你可以看到全世界发布的 Node.js 职位比 PHP 职位多了 差不多 10,000 个。这还不算 Node.js 相对于 PHP 来说是一个 年轻得多的技术,而且 PHP 在 WordPress 中广泛使用,而 WordPress构建了互联网上 30% 的网站。

640 (9).jpg

640 (10).jpg

最终,你可以看到,各地区的技术职位的平均薪资(我没有包含世界栏,因为 PHP 都没有在世界栏上榜):

640 (11).jpg

640 (12).jpg

640 (13).jpg

640 (14).jpg

640 (15).jpg

当然,我们在这里不是要吐槽 PHP。我们只是通过观察这些数值来决定选择学习什么。PHP 明显比 JavaScript 和 Node.js 之类的技术排名低。

更新:截至本文发布,stackoverflow 发布了2018 年调查结果《PHP 的衰退在扩大》。

 总结:

PHP 人气在下降,而 Node.js 的就业市场和人气在增加。总之,PHP 开发人员的薪资明显比其他开发人员低,而且差距似乎在继续加大。

Node.js vs PHP — 技术分析

让我们看一看这两种技术各自的优缺点。

 Node.js 优点:

  • 非常适合那些客户端和服务器端需要保持实时通信的应用。类似 socket.io 之类的工具,使得构建聊天应用之类的东西非常简单。同样这个功能也让 Node.js 适合那些处理物理网设备数据的应用以及单页应用,而这种类型的应用现在非常普遍。

  • 原生的 JSON 序列化和反序列化,与 Web 中的 AJAX 请求配合得非常好。

  • 对具有非阻塞输入 / 输出的事件驱动应用非常有用(输入 / 输出是指一个信息处理系统与外部世界的通信。这个信息处理系统可能是计算机,而外部世界可能是一个人或者另外一个信息处理系统,例如数据库)。

  • 你学会了 JavaScript,你就学会了 Node.js。你不需要去学习另外一种语言,例如 PHP。这意味着,你可以花费全部精力学习和掌握 JavaScript。你将能够用同一种语言编写前端和后端代码。

  • 许多流行的客户端框架,例如 React、Vue 和 Angular 是用 JavaScript 编写的,而且 JavaScript 是现代浏览器的主流语言。当你在服务器端使用 Node.js 时,你就可以获得在整个应用开发栈使用同一种脚本语言的所有好处。前端和后端使用同一种语言非常易于维护:这使得所有团队成员之间的协作更容易,因为前端和后端开发人员都使用相同的 JvaScript 数据结构、方法和语言规范。

  • 当处理来自客户端的大量请求时,单线程事件驱动系统非常快。

  • 通过 NPM 可以获取越来越多的客户端和服务器端第三方代码库,以及 Web 开发命令行工具。另外,大多数这些项目都托管在 GitHub 上,你可以报告一个问题,或者创建自己的代码分支进行定制。

  • 可以运行 JavaScript 相关工具和其它 Web 开发者相关工具的环境已经成为标准环境,包括任务执行器、压缩工具、代码检查工具、格式化工具、预处理工具、打包工具和分析处理器。

  • 许多新的 API 和 AWS Lambda 之类的服务提供原生支持。

  • V8 引擎的所有性能提升,我们都可以从中获益。V8 是 Google 研发的 JavaScript 解析器,Node.js 构建在 V8 引擎之上。由于谷歌开发团队不断提高 V8 的性能,Node.js 免费从中获益。

 Node.js 缺点:

  • 上面提到的 NPM 包会让你的代码变得臃肿,这些包可能是不安全的,而且由于有太多选项,想找到一个好用的软件包很困难(观察下载数和 GitHub 统计数据是一种解决这个问题的方法)。

  • 有太多使用 Node.js 和 npm 包构建服务器的方法。这使得新入门的开发人员更难以从中挑选。

  • 不适合那些依赖 CPU 消耗量大的代码的服务器。(例如,图像处理或排序等复杂算法)。一般来说,任何输入 / 输出之外的事情都可以看作是消耗 CPU 的代码。通常,多线程服务器环境比 Node.js 更适合这种场景(解决方案:如果需要,你可以用 C 语言编写 CPU 密集的代码)。

  • Node.js 不能利用底层系统或机器的所有核心。你必须自己写逻辑来使用多核处理器。这可以用许多方法实现,但是这需要一点额外的工作(当你能够最大化系统的 CPU 利用率时,这就会成为一个优势)。

 Node.js 总结:

Node.js 非常适合那些并发连接数比较多的应用,每一个请求只需要很少的 CPU 时钟周期。这使它非常适合目前互联网上的许多应用,例如单页应用应用和实时应用。

使用 JavaScript 内置的异步处理,可以创建高度可伸缩的服务器端代码,最大化单个 CPU 的利用率和内存,并且能够比传统的多线程服务器处理更多的并发请求。

Node.js 的依赖、规则和指南更少,这使得开发人员可以更自由更有创造力地按照他们的方式开发他们的应用。开发人员可以为他们的项目选择最佳的架构、设计模式、模块和功能,通过 NPM 从社区中获益。

 PHP 优点:

  • 由于 PHP 诞生年代久,因此有一稳健庞大的社区。

  • PHP 有一个功能强大的代码库,包含流行的网站构建平台(例如 WordPress、Joomla、Drupal)。CMS(内容管理系统),例如 WordPress,使得在几分钟内部署一个博客或者一个电商网站非常容易,而且允许非开发人员非常容易地进行定制。

  • 使得用非开发工具进行安装更容易,适合个人或者小型公司,他们不需要懂 SSH 和 Linux 服务器。基础托管平台提供的大量 PHP 应用(例如 cPanel)可以通过一次点击就安装完毕。

  • 和其它通用用途的编程语言不一样,PHP 是特意为 Web 设计的。PHP 提供了一种非常棒的服务器端解决方案,而不需要担心浏览器端的 JavaScript,因为所有的页面都可以轻易由服务器端生成和渲染。如果你想要避免在客户端传送太多代码,这就非常有用。Node.js 也可以这样做,但是解决方案没有这么简单。

  • PHP7 和 HHVM(由 facebook 支持)开发提高了 PHP 的性能。

 PHP 缺点:

  • PHP 只用于后端。这意味着,如果你想要做客户端相关的工作或者被认为是一名全栈开发者,你还是需要学习 JavaScript。

  • 使用 PHP,服务器端重渲染和大量访问服务器的请求来生成和渲染页面,对于单页应用来说,并不是一个好的选择。

  • 每个活跃的客户端消耗一个服务器进程。不适合拥有很多客户端连接的 App。

  • 与 Node.js 相比,新的 API 和 AWS Lambda 之类的服务对于 PHP 的原生支持有限。

  • 它遵循经典的客户端 - 服务器模型,其中每个页面都初始化应用、数据库连接和 HTML 渲染。这使得当你导航一个网站时,PHP 比 Node.js 应用要慢。Node.js 应用一直运行,只需要初始化一次。因此,随着 HTML5、AJAX 和 WebSocket 等 Web 技术的出现,Node.js 更适合新的 Web 发展方向。

 PHP 总结:

PHP 简单易学,围绕它有一个庞大的社区。对于标准化的博客或新闻站点方案来说,PHP 是一个不错的选择。它能够借助于最流行的 CMS(内容管理系统)——WordPress 的力量。WordPress 使你能够无需编写太多代码,就可以定制博客。然而,在这种情况下,更简单导致质量不怎么样。一项技术越容易学习,人们进入该领域也就越容易,然后就增加了人才供应,你的服务的收费也就更低。

  结  论  

随着 WordPress 的普及,PHP 是 Web 1.0 时代最顶尖的语言之一。Node.js 在 2009 年发布,而且技术上来讲并不是一种语言,而是 JavaScript 的一种运行时环境。Node.js 是新一代 Web 开发的佼佼者,在 Web 2.0 时代遇到的越来越多的基于事件的、数据驱动的、I/O 密集的应用,更适合用它来构建。

特别是,Node.js 基于事件的异步架构,使得它非常适合实时应用,例如消息和协作应用。在这些应用中,会发生大量并发请求,并且客户端和服务器之间会有大量前后端交互。没有 WordPress 就活不成?Node.js 有它自己非常棒的 CMS——Keystone.js。

总是需要有所取舍。从来不会有一种技术,你学了之后就能解决所有的难题并且不会过时。我们所能做的就是分析我们的选项,然后挑选出投资回报最好的一个。看看上面所讲的工作前景分析和技术分析,我们可以看出一个明显的赢家。

尽管所有技术用它们特定的方式使用都非常棒,但我们生活在一个信息如此丰富的世界,因此我们必须对我们可以集中精力并深入学习的话题数量进行限制。

在我的课程中,我教授一些这个领域的职业生涯相关的方法论,以及像 Facebook、Netflix、Google 和 Amazon 之类的一些大公司所使用的工具。如果你想要在 2018 年成为一名全栈 Web 开发者,我建议你学习:

HTML5

CSS3

Javascript

React.js

Node.js + Express.js

PostgreSQL

以及其它一些技术…

围绕技术的讨论应该有来自双方的意见,我建议你读一读评论。记住,总是存在权衡取舍,而你在工作中使用什么工具最终取决于你自己。我们所能做的就是了解我们的选择项,而不是盲目跟风。最后,愿意考虑与你自己不同的意见。

「前端之巅」是 InfoQ 旗下关注大前端技术的垂直社群。紧跟时代潮流,共享一线技术,欢迎关注。

r1zPDndNQdXwppM4gVij.jpg

 

原    文:Want to be a Web Developer? Learn Node.js not PHP
译    文:前端之巅
作    者:张健欣 译
更多文章:SDK.cn
目录
相关文章
|
10天前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
13天前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
50 0
|
13天前
|
存储 JavaScript NoSQL
构建高效Web应用:使用Node.js和Express框架
【8月更文挑战第30天】本文将引导你了解如何使用Node.js和Express框架快速搭建一个高效的Web应用。通过实际的代码示例,我们将展示如何创建一个简单的API服务,并讨论如何利用中间件来增强应用功能。无论你是新手还是有经验的开发者,这篇文章都将为你提供有价值的见解。
|
4天前
|
安全 PHP 开发者
PHP 7新特性及其对现代Web开发的影响
随着互联网技术的不断演进,PHP语言也在不断地更新迭代。PHP 7作为一次重大的升级,带来了许多引人注目的新特性,这些特性不仅优化了代码执行效率,还为开发人员提供了更多的便利和可能性。本文将探讨PHP 7的主要新特性,以及这些特性如何影响现代Web开发,帮助开发者更好地利用这些新工具来构建更快、更可靠的Web应用。
|
14天前
|
前端开发 JavaScript API
构建高效Web应用:React与Node.js的完美结合
【8月更文挑战第29天】在当今快速变化的软件开发领域,构建高性能、可扩展的Web应用成为开发者的首要任务。本文将深入探讨如何利用React和Node.js这两大技术栈,打造一个高效且响应迅速的现代Web应用。从前端的用户界面设计到后端的服务逻辑处理,我们将一步步分析这两种技术如何协同工作,提升应用性能,并确保用户体验的流畅性。通过实际代码示例和架构设计的解析,本篇文章旨在为读者提供一套清晰的指南,帮助他们在项目开发中做出更明智的技术选择。
|
12天前
|
前端开发 JavaScript API
【独家揭秘】Bottle框架为何能俘获开发者的心?三大实战案例带你领略Web开发新境界!
【8月更文挑战第31天】Bottle是一款轻量级Python Web框架,以简单高效著称,秉持极简设计,适合快速开发小型项目或构建API服务。本文通过具体代码示例展示Bottle框架的独特魅力,从安装到创建应用、路由设置、模板渲染及表单处理等方面进行详细介绍,帮助读者轻松上手并掌握Bottle的应用技巧。
27 1
|
11天前
|
Java 数据库连接 数据库
从零到精通:揭秘 Hibernate 构建持久层服务的全过程,你离数据持久化大师还有多远?
【8月更文挑战第31天】本文详细介绍了如何从零开始使用 Hibernate 构建一个持久层服务。首先,通过在 Maven 项目中添加必要的依赖,确保项目具备使用 Hibernate 的条件。接着,配置 `hibernate.cfg.xml` 文件以连接 MySQL 数据库,并设置了基本属性。然后定义了一个简单的 `User` 实体类及其映射关系。此外,还创建了一个 `HibernateUtil` 工具类来管理 `SessionFactory`。
24 0
|
11天前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
17 0
|
11天前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
35 0
|
11天前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
34 0