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