1.阻塞javascript
console.time('main');//代码计时器 //不断循环阻塞了代码的执行 for(var i=0;i<10000000;i++){ } console.timeEnd('main'); console.log("完成执行了");
2.错误优先的回调函数(针对异步操做)java
异步回调函数的设计ajax
(1)回调函数必定做为最后一个参数出现chrome
funtion foo1(name,age,callback){} 多线程
funtion foo2(value,callback1,callback2){} 异步
(2)回调函数的第一个参数默接受错误信息,第二个参数才是真正的回调数据(便于外界获取调用的错误状况)async
callback(null,data);第一个参数通常设置为错误的对象,第二个参数才是真正的数据,null就是没有错误函数
为何要把回调函数多加一个参数呢?性能
由于在程序执行过程当中,有可能出现错误,出现错误要让外界知道,采用的方式就是以参数形式传递(由于异步的时候,是没法经过try catch捕获异常,出了错误,外界是无法知道的)spa
约定将错误信息做为回调的第一个参数,为上一步的错误信息
function isEventOrOdd(number,callback){ if(typeof number==='number'){ if(number%2){ callback(null,'当前传入的是奇数'); }else{ callback(null,'当前传入的是偶数'); } } else{ callback(new Error('你传入的不是数字')); } } isEventOrOdd(10,(error,data)=>{ if(error) throw error; console.log(data); }); isEventOrOdd(11,(error,data)=>{ if(error) throw error; console.log(data); }); isEventOrOdd('asda',(error,data)=>{ if(error) throw error; console.log(data); });
运行结果:
3.异步
setTimeout()
$.ajax()
文件操做
Node全部的会发生阻塞的操做都是异步的
4.
Node采用chrome V8引擎处理JavaScript脚本,V8最大的特色就是单线程运行,一次只能运行一个任务。
Node大量采用异步操做(asynchronous operation),即任务不是立刻执行,而是插在任务队列尾部,等到前面的任务运行完以后再执行。
提升代码的响应能力
多线程的缺点:
(1)建立线程耗费资源
(2)线程数量有限
(3)CPU在不一样线程之间转换,有个上下文转换,这个转换很是耗时间
Node最大的性能优点,就是单线程