绝大多数对Node.js的讨论都把关注点放在了其处理高并发的能力上。简单来讲,相比其余同类解决方法,Node框架给开发这提供了构建高性能网络应用的强大能力,固然,开发者要明白Node内部所做出的权衡,以及Node构建应用之因此性能好的缘由。html
由于Node采用一个长期运行的进程,每一个请求共享这个进程,当这个变量被回调函数修改以后,结果就会改变。如PHP的Apache会产生出多个线程(每一个请求对应一个线程),每次都会刷新,内部变量等就会从新赋值。因此对回调函数修改当前内存中的变量必定要很是当心,还要注意对错误的处理是否会潜在的修改这些状态。node
当ajax同步处理的时候,必须等待服务器响应并返回页面,才执行后续语句,这就是阻塞。Node.js采用了事件的轮询,事件轮询是非阻塞的。ajax
什么是事件的轮询,Node会注册一个事件,挂到任务队列中,而后不断的询问内核事件是否分发,当事件分发以后,就会触发该事件的回调函数,而后继续执行下去,若是没有分发,就会继续执行后续的语句。服务器
console.log('hello'); setTimeout(function(){ console.log('world'); }, 500); console.log('bye'); //输出 //hello //bye //world
若是想了解更多的运行机制,单线程,看大佬的文章:http://www.ruanyifeng.com/blog/2014/10/event-loop.html网络
一个Http请求中,若是某个回调函数发生错误,整个进程都会遭殃,由于错误没有被捕获,进程的状态就不肯定。以后就可能没法正常工做,而且若是错误始终不处理的化,就会一直抛出意料以外的错误,这样很难调试。并发
为何try/catch 不会捕获异常呢,由于异步机制,当异步时,catch代码块已经执行事后,异步的代码才开始执行,一但出现错误,就不会被捕获到。这时候就会触发uncaughtException事件,直接终止当前栈,结果会致使全部用户终止链接。框架
处理方法参考:http://www.infoq.com/cn/articles/quit-scheme-of-node-uncaughtexception-emergence/异步
绝大部分Node异步API接受回调函数,第一个参数都是错误对象或者null;函数