1 编程语言的能力取决于什么

语言本身只提供定义变量 定义函数,定义类型,流程控制,循环结构之类的操作
取决于运行该语言的平台(环境)
对于js来说,我们常说的js实际是ES,大部分能力都是有浏览器的执行引擎决定的
BOM和DOM可以说是浏览器开放出来的接口
javascript能运行在哪取决于 这个环境有没有特定的平台

node.js是一个基于ChromeV8引擎的javascript运行环境。
node.js使用了一个事件驱动、 非阻塞式I/O的模型,使其轻量又高效

Node就是Javascript语言在服务器端的运行环境

运行平台有两层意思
1 首先 js语言通过Node在服务器运行 在这个意思上 Node有点像javascript虚拟机
Node提供大量的工具库,使得javascript语言与操作系统互动
2 Node又是javascript的工具库
Node选择了javascript 不是javascript发展出来了一个node,
Node可以用来开发服务端应用程序,Web系统。分发数据请求 渲染HTML

阻塞

用户不操作就会一直阻塞停顿
上一行代码不执行完 下一行代码无法执行

非阻塞的优势

提高代码的效率
充分利用单核CPU的优势
改善I/O的不可预测带来的问题

clipboard.png

Node采用的Chrome V8引擎处理javascript脚本

V8最大的特点就是单线程运行,一次只能运行一个任务
Node大量采用大量异步操作
即不是马上执行 而是插在任务队列的尾部 等到前面的任务运行完成后再执行
这样就提高了代码的响应能力
不知道用户什么时候操作交互
当代码需要等待一个无状态的时候 就需要异步

进程

clipboard.png

线程

clipboard.png

I/O

Node所有的会发生阻塞的操作都是异步的
I/O 可以理解为从输入到输出之间的转化过程
clipboard.png

Node中的异步I/O

clipboard.png

因为Node的操作大多数都是异步,无法通过try catch捕获异常
所以错误优先的回调函数 第一个参数为上一步的错误信息

clipboard.png

异步回调的问题
相比较于传统的代码

1.异步事件驱动的代码不容易阅读
 2. 异步事件驱动的代码不容易阅读
  3 不容易调式
   4  不容易维护
    

clipboard.png

node内部的操作

clipboard.png


HappyCodingTop
526 声望847 粉丝

Talk is cheap, show the code!!