Node.js 笔记01

1、Node.js 前言

1.node.js 之父

Ryan Dahl(瑞安达尔) ,技术好,颜值高!javascript

  • 数学系博士, 中途退学, 为了生活, 学习了Ruby On Rails接Web项目, 通过两年成了Web服务器专家。第一个阶段: 接项目作网站。第二个阶段: 帮助客户解决性能问题。
  • 2009年推出Node.js, 2012年退出Node.js, 转战Go语言。

2.Node出现的背景

为了解决Web服务器的高并发性能问题,Dyan Dahl 尝试用 ruby,c,lua去解决,但因语言自身缘由失败,即语言历史包袱过重,船大难掉头,各类语言的生态根深蒂固,没法轻易改变。关于如何避免IO阻塞:异步I/O,事件驱动php

三、V8引擎

一款专门对 JavaScript 进行解释和执行的流程虚拟机前端

好比把V8引擎嵌入到浏览器中,那么咱们写的JavaScript代码就会被浏览器所执行;那么若是把V8引擎嵌入到NodeJS环境下,那么咱们写的JavaScript代码就会被服务器所执行。java

V8引擎嵌入到不一样的宿主环境中时,就能够把JavaScript语言应用到不一样的多领域中。node

V8优点:python

  • 编译强大、快速执行
  • 性能好,比python,Ruby等脚本语言好
  • 历史包袱轻,没有同步I/O
  • 事件驱动机制

瑞安 达尔,修改了V8引擎内核,并用户服务器开发,因而产生了 Node.jswebpack

2、Node.js 简介

Node.js 是一个让 JavaScript 运行在服务端的开发平台,使得 javascript从浏览器 延伸到了服务器,一开始叫 web.js,目的就是用来写高性能的Web服务器的。后来愈来愈壮大,改成叫 Node.js,从2009年到如今,不断改进和更新......web

与其余后台语言的区别:shell

  • Node.js 不是一种独立的语言,Node.js 用JavaScript进行编程,运行环境是包装后的js 引擎(V8)
  • Node.js不架设在任何服务器软件上,java,php 等须要部署到tomcat,apache等
  • 用最小的硬件成本,达到跟高的并发,更优秀的处理性能

Node.js的特色:数据库

一、单线程:

  • 优点:减小了内存开销(操做系统不会有线程建立、销毁的开销)
  • 劣势:若是一个事情被I/O阻塞,整个线程就被阻塞了

二、非I/O阻塞

当在访问数据库取得数据的时候,须要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码以后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地下降了程序的执行效率。

Node.js中采用了非阻塞型I/O机制,所以在执行了访问数据库的代码以后,将当即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提升了程序的执行效率。

当某个I/O执行完毕时,将以事件的形式通知执行I/O操做的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。

阻塞模式下,一个线程只能处理一项任务,要想提升吞吐量必须经过多线程。而非阻塞模式下,一个线程永远在执行计算操做,这个线程的CPU核心利用率永远是100%。

三、事件驱动

好比执行着小红的业务,执行过程当中,小刚的I/O回调完成了,此时怎么办??因此要有事件驱动循环

不论是新用户的请求,仍是老用户的I/O完成,都将以事件方式加入事件环,等待调度,Node.js当中全部的I/O都是异步的, 都是回调函数套回调函数

运做流程:

  • 在Node中,客户端请求创建链接,提交数据等行为,会触发相应的事件。
  • 在Node中,在一个时刻,只能执行一个事件回调函数, 可是在执行一个事件回调函数的中途,能够转而处理其余事件
    (好比,又有新用户链接了),而后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。
  • 当某一个事件发生的时候,就去执行回调函数。执行完毕以后,再去找到事件循环当中找一个新的事件进行来

Node.js当中全部的I/O都是异步的, 都是回调函数套回调函数

3、Node.js的应用方向

1.特色

  • 善于I/O,不善于计算

由于Node.js最擅长的就是任务调度,若是你的业务有不少的CPU计算,实际上也至关于这个计算阻塞了这个单线程,就不适合Node开发。

当应用程序须要处理大量并发的I/O,而在向客户端发出响应以前,应用程序内部并不须要进行很是复杂的处理的时候,Node.js很是适合。Node.js也很是适合与web socket配合,开发长链接的实时交互应用程序。

  • 异步

2.适用场景

网站开发(如express/koa等)
im即时聊天(socket.io)
api(移动端,pc,h5)
HTTP Proxy(淘宝、Qunar、腾讯、百度都有)
前端构建工具(grunt/gulp/bower/webpack/fis3…)
跨平台打包工具
PC端的electron、nw.js,好比钉钉PC客户端、微信小程序IDE、微信客户端,移动的cordova,Phonegap,一站式开发框架ionic framework
写操做系统(NodeOS)
命令行工具(好比cordova、shell.js)
反向代理(好比anyproxy,node-http-proxy)
编辑器Atom、VSCode等

3.Node.js 不是全能的

Node.js本是就是极客追求性能极致的产物,缺乏了不少服务器的健壮考量, 因此Node不可能应用在银行、证券、电信等须要极高可靠性的业务中。

创业型公司(正处于A轮、B轮)很是爱使用Node作核心业务

■ 功夫熊的APP,后台是Node.js在伺服
■ 实现网,整站为Node.js搭建

成熟大企业,基本上都是用Node实现某一方面的功能:
■ 知乎用了一个Node进程,跑起了“站内信”功能
■ 百度的不少表单,是用Node保存到数据库的

4.企业中的使用场景

相关文章
相关标签/搜索