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最大的性能優點,就是單線程