初识nodejs

 

node.js是什么东西?

  现在流行一种说法叫web全栈工程师,讲的是一个web工程师要懂前后端,以及前端的各种牛逼技术,我觉得这个全栈工程师并不是说让你一个人去干一个团队的活,而是说你要有足够的技术思维以及技术掌控力,说白了就是你要懂的多,对于整天搞前端,和JavaScript打交道的我们来说,我们不妨来来看一个用JavaScript实现的后端平台,node.js.

  • nodejs是以chrome v8为运行环境的一个平台,它不是一门语言,而是一个平台,
  • nodejs致力于是构建速度快,稳定的网络程序更简单
  • 它具有事件驱动和非阻塞I/O的特色,使之轻量级并且高效率
  • 它非常适合在分布式设备运行数据密集型实时应用程序
 

使用chrome v8引擎?


  nodejs为什么要使用chrome引擎呢,据说是当时的创始人在开发nodejs的时候,想要创造出来一个高性能,异步IO,事件驱动的语言,因为JavaScript中是单线程执行的,所以没有同步IO,他便选定了JavaScript来作为基础实现的语言,同时由于谷歌的v8引擎是开源的,而且是运行JavaScript很快的引擎,便很机智的选择了chrome v8引擎来作为基础环境了,

 

nodejs的作用?


  讲到这里,我们大概的明白了nodejs是一个平台,是一个环境,它是由chrome v8引擎来做底层支持,使用JavaScript来做语言支持,大概意思就是我们之前使用JavaScript运行在浏览器端去处理dom,bom操作等等,现在JavaScript运行在服务器去处理数据的增删改查,接受请求,发送数据,查找修改文件,WHAT?这么吊?对的,现在使用JavaScript你就可以去做那些以前你觉得很牛逼的事情.

  当我们输入一个url去访问网站,服务器端接受到了这个请求之后,开始去查找请求的文件,然后去执行数据库查询,查询后将响应体返回给浏览器,这是一个大致的过程,那么在以前的服务器中,例如Apache,每一个请求事件它都会去创建一个新的进程去处理这个请求,

  之后,我们有了ajax,不再去进行整个页面的刷新了,而是进行局部的刷新,我们只需要去向服务器请求我们需要的那一部分数据就行了,这是一个巨大的进步.

  那我们可以再去设想一个场景,当我们在看朋友圈时,我么每一个用户的朋友圈都在实时的更新当中,按照我们以前的做法是给每一个用户都和数据库端有一个长链接(long polling),

所谓的长链接,就是我们每个用户都和服务器有一个链接,由于服务器不会主动向浏览器发送数据,当链接建立之后,不会立马断开,服务器端会一直在等待,当浏览器需要它将更新的数据返回时它才会发送数据,例如你有一个朋友在微信上给你发了一条消息,这是服务器端就会向你的微信端发送一个消息,当浏览器端接受到了消息之后,会将当前链接断开,但是会再理解建立一个链接.

  我们以前的这种做法的弊端就是服务器开销太大,一直都有链接占用着资源,那么怎么解决呢?用nodejs就可以解决,nodejs有着非阻塞IO和事件驱动的特点,这些术语其实并不是那么的复杂,我们可以将非阻塞IO想象成一个事件循环,这个事件循环在不停的转啊转,有请求进来时,就将他装进这个事件循环,每一个事件都有一个回调,当我们产生一个请求时,不用等待,而是直接将该进程放进事件循环中,当数据库有信息返回时再触发回调函数.每个请求就像ajax执行时那样,不需要等待, 
当我们的服务器请求结果返回了,事件循环就把结果传回用户的浏览器,接着继续跑,在这种方式下,我们的服务器就不会闲着了,(在多线程下有可能一些线程都没有什么用)并且从理论上讲,同一时刻的数据库查询数量,以及用户的请求数量就没有限制了,服务器只在用户那边有请求的时候才响应,这就是事件驱动.更多的可以理解为单核手机模拟四核手机的情况.

 

总结

  nodejs不是一门新的语言,他就是JavaScript的一个运行环境,JavaScript以前是在浏览器端跑,现在有了nodejs就可以在后端跑,就像汽车原本只能在公路上跑,现在你给他装了nodejs,它现在可以在水里跑了一样.那么这么抽象的说,我自己搞的也晕头转向的,对于刚趟入nodejs浑水的我.欢迎大家来一起交流!

posted @ 2016-10-27 14:53  学习会让你青春永驻  阅读(...)  评论(...编辑  收藏