Node.js 这一次再也不错过

学习新知识新事物,我以为得知道她的一些属性,好比是什么,能解决什么问题,来自哪里等等。没有最好的,只有最合适的。接下来的日子或者说岁月里,就来浅谈 Nodejs。前端

是什么

正如 Node.js 官方所说 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. 即 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。能够看出 Node.js 不是一门新的编程语言,而是 JavaScript 的运行环境(服务端的运行环境,之如客户端的浏览器环境),而 Nodejs 的编程语言指的是 JavaScript(这之间的关系仍是要梳理清楚)。node

2009 年以前,当时的 JavaScript 仍是一个在浏览器环境里的一门脚本语言,实现前端页面交互和一些动态特效。时间的分水岭就在这里,Javascript 就不仅运行于浏览器,还能够运行于服务端,仿佛打通了先后端的任督二脉,这要归功于 Node.js 之父 Ryan Dahl。数据库

为何选 Javascript

JavaScript 是一个单线程的语言,单线程的优势是不会像 Java 这些多线程语言在编程时出现线程同步、线程锁问题,同时也避免了上下文切换带来的性能开销问题。想象一下多线程对同一个 DOM 进行操做会怎样?不是乱套了吗?可能你会想一个问题:单线程是否是前面一个执行不完,后面就被卡住了?编程

JavaScript 是一种采用了事件驱动、异步回调的模式(主线程是单线程)。JavaScript 在虚拟机上因为有了 Chrome V8 的支持,使得 JavaScript 成为了 Node.js 的首选语言。因此,Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。后端

架构

首先,Node.js 由 Libuv、Chrome V八、一些核心 API 构成,如图所示:浏览器

  • Node Standard Library:Node.js 的标准库,对外提供的 JavaScript 接口,如 http、buffer、fs、stream 等;
  • Node bindings:是 JavaScript 与 C++ 链接的桥梁,对下层模块进行封装,向上层提供基础的 API 接口;
  • V8:Google 开源的高性能 JavaScript 引擎,使用 C++ 开发,应用于谷歌浏览器;
  • Libuv:是一个跨平台的支持事件驱动的 I/O 库,使用 C 和 C++ 语言开发;
  • C-ares:一个异步 DNS 解析库;
  • Low-Level Components:提供了 http 解析、OpenSSL、数据压缩(zlib)等功能;

特色

跨平台

最初 Node.js 只运行于 Linux 平台,V0.6.0 版本后在 Libuv 的加持下可运行在 Windows 平台服务器

单线程

使用单线程运行,不像 Apache HTTP 之类的服务器,每发生一个请求就产生一个线程。这种方法避免了 CPU 上下文切换和内存中的大量执行堆栈,解决了 Nginx 和其它服务器的 “上一个 10 年,著名的 C10K 并发链接问题”。多线程

非阻塞 I/O

避免了等待输入或输出(文件系统、Web服务器、数据库等)响应形成的 CPU 时间损失,得益于 Libuv 的异步 I/O。架构

事件驱动

事件与回调在 JavaScript 中家常便饭,是一种高性能的服务模型,对于习惯同步思路编程的同窗一时很难理解。Node.js 与 Nginx 均是基于这种方式,只是 Nginx 采用 C 编写,适用于 Web 服务器,Node.js 是可扩展、高性能的平台。并发

场景

I/O 密集型场景

Node.js 的特色就是事件驱动,非阻塞异步 I/O,只开一个主线程,不会每一个请求都去建立一个线程,从而节省资源开销。

Resutful API

使用 Node.js 来作为中间层,整合数据并提供 API 接口,这些数据源通常来自第三方接口或者数据库,后端就能够更专一于业务开发。推荐一个去哪儿开源的 API 管理工具 YAPI,就是使用的 Node.js 进行开发的。

BFF

Backend For Frontend(服务于前端的后端),逻辑上的分层并非新技术。可作一些资源的整合。场景是:原先须要从多个地方获取数据,有了这一层(作个聚合),统一处理以后返回一个数据源,同时后期也不会由于后端数据迁移而重构。

RPC

Remote Procedure Call(远程过程调用)。当今微服务模式下,主要是针对功能或业务进行服务化,服务间的通讯常见的模式都是经过 HTTP 实现,HTTP 属于应用层协议,若是经过 TCP 的方式(传输层),那岂不是更高效。RPC 服务就是采用的 TCP,好比 Google 的 gRPC、阿里的 Dubble。

基础工具

好比编译器、构建工具、搭建脚手架等,咱们知道的 Gulp、Webpack 就是成功案例。

论坛社区

Nodeclub 是使用 Node.js 和 MongoDB 开发的社区系统,界面优雅,功能丰富,小巧迅速,已在Node.js 中文技术社区 CNode 获得应用,但你彻底能够用它搭建本身的社区。

Serverless

无服务器架构,开发者只需关注于业务自己,不须要去关心运维、流量处理这些工做。咱们知道 JavaScript 中函数是一等一的公民,写个函数就实现一个 API 接口给到前端,对开发工做减轻不少(函数即服务)。

MicroServices

微服务,小型服务、以独立进程运行、可以使用不一样语言。根据业务形态来选择不一样的语言实现,Node.js 自己也是很轻量级的,实现起来也很快。最好的打不过合适的!

你能够...

下一篇:Node.js 之 Module 模块

相关文章
相关标签/搜索