学习nodejs技术已经有一周时间了,其中有几次想写点东西出来。但是打开编辑器发现第一句话就很不好写。nodejs到底是个什么东西呢?官方的解释就不提了,我来说一下我的理解。nodejs不是一门语言,因为你会发现所有代码都是JavaScript。nodejs也不是一个web框架,nodejs是一个平台,是一个解析器。
学习nodejs可谓一路坎坷,书就不提了。查了一下图书馆有7种nodejs书籍,40本是全被借出。这个事说明了一个问题,nodejs正在发展,nodejs非常的火热。找不到书,只能在网上找一些教程和博客来看看,没办法系统的学习。但是经过一系列的死磕,还是找到了一些关键词:事件驱动,回调,非阻塞I/O,异步操作。一般在学习node的过程中,你还会接触到一些别的框架和技术,比如jade、ejs、express、grunt、bootstrap。。。。一般的教程没有单独的特别细致专注node本身的。所以我被这些模板引擎、构建工具、前端框架搞的晕头转向。最后自己也晕了,说好的node呢?
事件驱动机制是Node.js通过内部单线程高效率地维护事件循环队列来实现的,没有多线程的资源占用和上下文切换,这意味着面对大规模的http请求,Node.js凭借事件驱动搞定一切。举例说明一下大致的过程:你去请求nodejs服务器上的资源A,nodejs接受到请求后,调用一个函数去读取磁盘资源A。然后node服务器就不管了,去处理别的请求了。当A资源被读取完毕了,有一个回调函数被插入到nodejs服务队列中。当nodejs运行这个回调的时候,实际上就把A返回给浏览器了。这叫做事件驱动。
非阻塞式IO的意思是指,在IO操作的同时,不影响其他事件的处理。相当于开辟了一个线程去干这事了。需要注意的是,nodejs可没办法这么做。nodejs是单线程的,只能一口一口的吃东西。说到底还是通过回调实现,和上面举的例子是一个道理。
学习nodejs需要对JavaScript有个比较深入的理解和学习,闭包、匿名函数、作用域没搞清楚就别尝试了。还有对于后端 技术的了解个人认为也很重要。甚至我觉得nodejs的开发对于web流程的理解程度要求很高。不同于java或者PHP开发,nodejs的很多“web服务器”要做的事情都得自己来做。而且HTTP协议、路由、项目管理、大量的工具选择等等问题都是一种挑战。
在此记录一下资料地址:
http://blog.fens.me/series-nodejs/