JavaScript 是每一个前端 Web 开发人员都能触手可及的工具,所以它成为一门十分风行的编程语言,以至于被定型为一种专为 Web 开发的编程语言。读这本书之前,你可能据说过 Node.js,这是一个在 Web 浏览器之外运行 JavaScript 程序的平台。到目前为止,Node.js 曾经有十年的倒退历史了,已成为一个成熟的编程平台,被广泛应用于各种大小型我的项目中。
本书将介绍 Node.js。在本书的结尾,你将理解应用 Node.js 开发服务器端 Web 应用程序的残缺生命周期,从概念到部署到平安进攻。在撰写本书时,咱们假如:
- 你曾经晓得如何编写软件
- 你相熟 JavaScript
- 你对应用其余语言开发 Web 应用程序有所理解
当咱们评估一个新的编程工具时,咱们是否会因为它是风行的新工具而抉择它?兴许咱们中的一些人会这样做,但成熟的办法是对不同的工具进行衡量比拟,从中抉择适宜本人的工具。这就是本章的内容,即介绍应用 Node.js 的技术原理。在编写代码之前,咱们必须思考 Node.js 是什么,以及 Node.js 为何适宜软件开发工具的整个市场。而后,咱们将深刻理解利用程序开发工作,并意识到通常最好的学习办法就是入手实际。
本章将介绍以下主题:
- Node.js 简介
- 应用 Node.js 能够做什么
- 为什么要使 Node.js
- Node.js 的体系结构
- Node.js 的性能、利用率和可扩展性
- Node.js、微服务架构和测试
-
应用 Node.js 实现 12 因素用程序模型
Node.js 概述
Node.js 是一个激动人心的新平台,可用于开发 Web 应用程序、应用程序服务器、任何类型的网络服务器或客户端以及通用编程。它通过奇妙地服务器端 JavaScript、异步 I / O 和异步编程联合在一起,在 Web 应用程序中实现了极高的可扩展性。
尽管 Node.js 只有十年历史,但曾经迅速崛起,并且在当初的我的项目开发中扮演着重要的角色。无论是大公司还是小公司,都在将 Node.js 用于大型和小型我的项目。例如,PayPal 曾经将许多服务器从 Java 平台迁徙到 Node.js 平台。
Node.js 体系架构与其余应用程序平台截然不同。当线程被宽泛地用于扩大应用程序而导致所有 CPU 性能被占用时,Node.js 因为线程固有的复杂性而避开线程。有人说是因为单线程事件驱动架构内存占用低,吞吐量高,负载下的提早曲线更好,编程模型更简略。Node.js 平台正处于疾速倒退阶段,许多人认为它是 Java、PHP、Python 或 RubyonRails 等传统 Web 应用程序体系架构的无力替代品。
从实质上讲,Node.js 是一个独立的 JavaScript 引擎,具备适宜于通用编程的扩大,同时明确关注应用服务器开发。即便咱们将 Node.js 与应用服务器平台进行比拟,Node.js 也不是应用服务器。相同,Node.js 是一个相似于 Python、Go 或 Java SE 的编程运行时。尽管 Node.js 可能编写 Web 应用程序框架和应用程序服务器,但 Node.js 只是一个执行 JavaScript 程序的零碎。
Node.js 的要害架构抉择是事件驱动,而非多线程。Node.js 体系结构依赖于将阻塞操作分派给单线程循环事件,将后果作为调用事件处理函数的事件返回给调用方。在大多数状况下,事件被转换为由异步函数解决的 Promise。因为 Node.js 基于 Chrome 的 V8 JavaScript 引擎,因而在 Chrome 中实现的性能和性能能很快同步到 Node.js 平台。
Node.js 外围模块足够通用,可能反对所有基于 TCP 或 UDP 协定的所有类型的服务器,无论是域名零碎(DNS)、HTTP、internet 中继聊天(IRC)还是 FTP。尽管 Node.js 可能开发 internet 服务器或客户端,但主要用途还是在于定期的网站开发,以取代 Apache/PHP 或 Rails 等堆栈技术,或对现有网站进行改良。例如,能够通过 Node.js 的 Socket.IO 库轻松地给现有网站增加实时聊天性能或对现有网站进行监控。因为 Node·js 的轻量级、高性能个性,所以通常将 Node.js 作为粘合服务器应用。
一个特地乏味的组合是应用 Docker 和 Kubernetes 等工具或 AWS Lambda 等性能在古代云基础设施上部署微型服务器。将大型应用程序划分为易于部署的大规模微服务时,Node.js 运行十分良好。
让咱们对 Node.js 进行更深刻的理解。
Node.js 的能力
Node.js 是一个在 Web 浏览器之外编写 JavaScript 应用程序的平台。这不是咱们在 Web 浏览器中相熟的 JavaScript 环境!尽管 Node.js 执行的 JavaScript 语言与咱们在浏览器中应用的 JavaScript 雷同,但 Node.js 没有与浏览器相干的性能。例如,没有内置 HTML DOM。
除了执行 JavaScript 的原生性能外,Node.js 内置模块还提供以下性能:
- 命令行工具(shell 脚式)
- 一种交互式终端格调的程序,即读 - 值 - 打印循环(REPL)
- 优良的过程管制性能,可监督子过程
- 用于解决二进制数据的缓冲区对象
- 具备全面的事件驱动回调的 TCP 或 UDP 套接字
- DNS 查找
- 一个位于 TCP 库文件系统拜访之上的 HTTP、HTTPS 和 HTTP/ 2 客户端服务器。
- 通过断言内置的根本单元测试反对
Node.js 的网络层是低层级的,同时也非常简单易用。例如,你应用 HTTP 模块编写编写 HTTP 服务器或客户端只需几行代码。这是十分弱小的,能让开发者非常容易地取得协定申请,并让你准确地实现那些应该在申请响应中返回的 HTTP 标头。
通常 Web 应用程序开发者不须要解决低级别的 HTTP 或其余协定;相同,咱们偏向于更高效地应用更高级的接口,例如,对 PHP 开发者,因为 Apache/Nginx/ 等曾经提供了 HTTP,所以他们不须要编写实现堆栈的 HTTP 服务器局部。相同,Node.js 程序员则须要编写 HTTP 服务器,并在该服务器上运行利用程序代码。
为了简化 HTTP 服务器开发,Node.js 社区有诞生了几个 Web 应用程序框架,如 Express,提供了程序员常需的高级接口。你能够疾速地应用内置性能(如 sessions、cookie、服务动态文件和日志记录)配置 HTTP 服务器,从而专一于业务逻辑。其余框架提供 OAuth2 反对或关注 RESTAPI,等等。
应用 Node.js 的社区曾经在这个根底上创立了各种各样的工具。
Node.js 能做什么
Node.js 并不局限于 Web 服务器利用开发,Node.js 社区曾经将 Node.js 带向了其余方向:
- 构建工具:Node.js 已成为软件开发或开发服务基础设施通信的命令行工具的风行抉择。Grunt、Gulp 和 Webpack 被前端开发人员宽泛用于打包网站构建素材。Babel 宽泛地用于转换古代 ES2016 代码,以便在较旧的浏览器上运行。风行的 CSS 优化器和处理器(如 POSTSS)是应用 Node.js 中编写的。动态网站生成零碎(如 Metalsmith、Punch 和 AkashaCMS)应用 Node.js 命令行运行,并生成上传到 Web 服务器的网站内容。
- Web UI 测试:Puppeter 让你能够管制无标头 Chrome Web 浏览器实例。通过 Puppeter,你能够应用功能齐全的古代 Web 浏览器开发 Node.js 脚本。一些典型的用法是 Web 抓取和 Web 应用程序测试。
- 桌面应用程序:Electron 和 NodeWebKit(NW.js)都是用于开发 Windows、macOS 和 Linux 桌面应用程序的框架。这些框架利用 Node.js 库包装的大量的 Chrome 组件应用 Web UI 技术开发桌面应用程序。因为应用程序是应用 HTML5、CSS3 和 JavaScript 编写的,因而能够应用各种先进的 Web 框架,如 Bootstrap、React、VueJS 和 AngularJS 等。许多风行的应用程序都是应用 Electron 构建的,包含 Slack 桌面客户端应用程序,Atom、Microsoft Visual Code 编辑器、Postman REST 客户端、GitKraken GIT 客户端和 U 盘零碎镜像制作工具 Etcher。
- 挪动应用程序:Node.js for Mobile Systems 我的项目可能让你应用 Node.js 开发 iOS 和 Android 智能手机或平板电脑应用程序。苹果的 App Store 规定不容许接入具备 JIT 性能的 JavaScript 引擎,这意味着惯例的 Node.js 不能用于 iOS 利用程序开发。对于 iOS 利用程序开发,该我的项目应用 Node.js-on-ChakraCore 绕过 App Store 规定。对于 Android 利用程序开发,该我的项目在 Android 上应用惯例 Node.js。在撰写本文时,该我的项目正处于开发的晚期阶段,但看起来很有心愿。
- 物联网(IoT):Node.js 是物联网我的项目中十分风行的语言,Node.js 运行在大多数基于 ARM 的单板计算机上。最最具代表性的例子是 NodeRED 我的项目。它提供了一个图形编程环境,容许你通过将区块连贯在一起来绘制程序。它具备面向硬件的通用 I /O(GPIO)机制,例如,与 Raspberry Pi 或 Beaglebone 单板计算机上的通用 I /O(GPIO)引脚交互。
你可能曾经在应用 Node.js 应用程序然而没有意识到这一点!JavaScript 在 Web 浏览器之外有一席之地,这不仅仅归功于 Node.js。
服务器端 JavaScript
别再挠头了!当然,你可能正在这样做,并自言自语,“浏览器语言在服务器上能做什么呢?”事实上,JavaScript 在浏览器之外有着漫长且根本未知的历史。JavaScript 是一种编程语言,就像其余所有语言一样,最好的问题是“为什么 JavaScript 仍被困在 Web 浏览器中?”
早在 Web 混沌时代,编写 Web 应用程序的工具就处于初级阶段。在 Java 和 PHP 诞生的初期,一些开发人员应用 Perl 或 TCL 编写 CGI 脚本。即便如此,服务器端依然有 JavaScript 的身影。最后应用 JavaScript 编写的 Web 应用服务器是 Netscape 的 LiveWire 服务器。微软 ASP 的一些版本应用 JScript,这是微软本人开发的 JavaScript 版本。最近的一个 JavaScript 服务器器我的项目是 Java 的 RingoJS 应用程序框架。Java6 和 Java7 都提供了 RhinoJavaScript 引擎。在 Java8 中,Rhino 被摈弃,取而代之的是更新的 Nashorn JavaScript 引擎。
换句话说,浏览器之外的 JavaScript 并不是什么新鲜事,尽管并不常见。
你曾经理解到 Node.js 是一个在 Web 浏览器之外编写 JavaScript 应用程序的平台。Node.js 社区将该平台远用于大量的应用程序类型,远远超过最后为该平台构想的数量。这证实了 Node.js 的风行水平,然而咱们依然必须思考应用 Node.js 的技术起因。
英文电子书举荐
Beginning iOS Game Center and GameKit: For iOS, tvOS, and MacOS, 2nd Edition
API Marketplace Engineering: Design, Build, and Run a Platform for External Developers
Azure Cloud Security for Absolute Beginners: Enabling Cloud Infrastructure Security with Multi-Level Security Options
More Java 17: An In-Depth Exploration of the Java Language and Its Features, 3rd Edition
Cognitive Behavior and Human Computer Interaction Based on Machine Learning Algorithms
NSX-T Logical Routing: Fortify Your Understanding to Amplify Your Success
Innovative SAP SuccessFactors Recruiting: A Guide to Creating Custom Integration and Automation
Simplifying Service Management with Consul: Overcome connectivity and security challenges within dynamic service architectures