我理解的Node.js

看到很多同事写了关于Node.js的Blog.也就跟着学习了一下。作为一个初级入门者,学习后将我的理解总结如下:

  • Node 是一个命令行工具。
  • Node 可以使JS的代码在服务端运行。
  • 编写的Js 可以在V8中执行。
  • Node 提供了一组API 访问网络和文件系统。

1.Node只是是一个工具,提供Js在服务端执行,如同Java,Ruby,PHP,不要想用Node去解决所有的事情。

2.Node并行运行,可以同时做几个任务(Task),显然因为Node是并行执行多个任务显然他是多线程的。这个后面我们去学习下Node的Source,看看他是如何实现这个并行运行的机制的。

For example,如图1,2:

                    图1

                    图2

以上代码给Node执行一个读取一个写入的Task,一旦处理结束回调会被触发。注意一次只有一个回调触发,直到这个回调执行完。其他回调排队等候,因为是异步执行的所以回调没有执行顺序。图2只是一个截图,大家可以自己动手写个小代码体会一下就明白了。

3.单线程/事件循环机制使Node不用担心代码会同时访问同一个数据结构。(Node文档原文摘抄)

 Ps:但是实践中明显Node是支持多线程的,是不是通过线程安全去实现的?这个还需要深入理解。

4.Node有些什么优势?

  • 执行效率,Web应用中,等待Db查询的结果是一个耗时点,通过之前的并行处理机制,它可以一次执行所有的查询(异步),节约最慢的那个查询的执行时间。
  • 基于Js,前后端共享代码,都是Js写的。
  • V8的执行效率,Node宣传中说的提供经可能接近于本地系统I/O的执行效率。

除了第一点可以自己验证,后面两点都是网上资料所述的,第二点可以理解,第三点这个有点宣传的意思,挨下来准备找个测试工具试一把。其他优势欢迎大家补充。

5.什么情况下适合用Node?

学习了Node后肯定会在项目上到处寻找可以使用到它的地方,在讨论技术实现的时候会想怎么把它塞进去,否则不是白学了嘛^-^首先我觉得先要理解低响应时间和高并发重要吗?项目规模多大?显然在大型项目上要运用Node的话考虑的问题还会更多,如库资源,Node本身存在的Bug等等,需要仔细评估。

6.目前使用Node的站点汇总:

http://cnodejs.org

http://www.plurk.com/top

国外的我就不贴了,感谢祖国~

结尾,通过对Node的学习,目前来看Node近似80%相似度如08年那会非常火的一款基于Java的服务端框架(商业级),该框架源码是Java的支持Js作为脚本执行,同样具有并行处理机制,实现原理基本一致。作者是一位Node的入门级初学者,上述内容限于水平有不足之处,欢迎大家拍砖指正,我会汇总后修改的,本文文体有些口语化请包涵。 

转载时,请注明本文来源:www.cnblogs.com/tmywu  

作者: 老鱼678

mail:tommywu23@126.com

原文地址:https://www.cnblogs.com/tmywu/p/3017888.html