node.js process nextTick作用
process.nextTick(callback)的功能是爲事件循環設置一項任務,Node.js 會在
下次事件循環調響應時調用 callback。
初學者很可能不理解這個函數的作用,有什麼任務不能在當下執行完,需要交給下次事
件循環響應來做呢?我們討論過,Node.js 適合 I/O 密集型的應用,而不是計算密集型的應用,
因爲一個 Node.js 進程只有一個線程,因此在任何時刻都只有一個事件在執行。如果這個事
件佔用大量的 CPU 時間,執行事件循環中的下一個事件就需要等待很久,因此 Node.js 的一
個編程原則就是儘量縮短每個事件的執行時間。process.nextTick() 提供了一個這樣的
工具,可以把複雜的工作拆散,變成一個個較小的事件。
function doSomething(args, callback) {
somethingComplicated(args);
callback();
}
doSomething(function onEnd() {
compute();
});
我們假設 compute() 和 somethingComplicated() 是兩個較爲耗時的函數,以上
的程序在調用 doSomething() 時會先執行 somethingComplicated(),然後立即調用
回調函數,在 onEnd() 中又會執行 compute()。下面用 process.nextTick() 改寫上
面的程序:
function doSomething(args, callback) {
somethingComplicated(args);
process.nextTick(callback);
}
doSomething(function onEnd() {
compute();
});
改寫後的程序會把上面耗時的操作拆分爲兩個事件,減少每個事件的執行時間,提高事
件響應速度。
不要使用setTimeout(fn,0)代替process.nextTick(callback),
前者比後者效率要低得多。
下次事件循環調響應時調用 callback。
初學者很可能不理解這個函數的作用,有什麼任務不能在當下執行完,需要交給下次事
件循環響應來做呢?我們討論過,Node.js 適合 I/O 密集型的應用,而不是計算密集型的應用,
因爲一個 Node.js 進程只有一個線程,因此在任何時刻都只有一個事件在執行。如果這個事
件佔用大量的 CPU 時間,執行事件循環中的下一個事件就需要等待很久,因此 Node.js 的一
個編程原則就是儘量縮短每個事件的執行時間。process.nextTick() 提供了一個這樣的
工具,可以把複雜的工作拆散,變成一個個較小的事件。
function doSomething(args, callback) {
somethingComplicated(args);
callback();
}
doSomething(function onEnd() {
compute();
});
我們假設 compute() 和 somethingComplicated() 是兩個較爲耗時的函數,以上
的程序在調用 doSomething() 時會先執行 somethingComplicated(),然後立即調用
回調函數,在 onEnd() 中又會執行 compute()。下面用 process.nextTick() 改寫上
面的程序:
function doSomething(args, callback) {
somethingComplicated(args);
process.nextTick(callback);
}
doSomething(function onEnd() {
compute();
});
改寫後的程序會把上面耗時的操作拆分爲兩個事件,減少每個事件的執行時間,提高事
件響應速度。
不要使用setTimeout(fn,0)代替process.nextTick(callback),
前者比後者效率要低得多。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.