![](/img/trans.png)
[英]How can i call a function after completion of another function if the another function takes more time?
[英]nodejs aync function taking more time when I replace function call with another function which is similar
有人可以向我解釋為什么當我運行以下代碼時所需的時間更少:
for2=longTsk() -- approx 2500ms every time
並且對於
for2=longTsk3() -- approx 3000ms every time
這兩個函數中的普通 for 循環每次都需要大約 1500 毫秒
function longTsk() {
return new Promise((resolve) => {
setImmediate(() => {
for (let i = 0; i < 2019000000; i++) {
}
console.log('HOILA');
resolve()
});
});
}
function longTsk3() {
return new Promise((resolve) => {
setImmediate(() => {
for (let j = 0; j < 2019000000; j++) {
}
console.log('HOILA');
resolve()
});
});
}
const date = Date.now()
async function doForAll() {
const for1 = longTsk()
const for2 = longTsk() //when i change this to longtsk3 exact double time is required
await Promise.all([for1, for2])
console.log(Date.now() - date);
}
doForAll()
console.log('sldkfgj');
console.log('lskdjglkjdfg');
我第一次在這個屏幕截圖中運行longTsk3
然后longTsk
為什么用另一個類似的 function (longTsk3) 替換第二個 function 調用,需要多花 500 毫秒? 這個時間尺度可能會因機器而異,但是在同一台機器上運行的兩種情況下肯定會有很大的時間差異!
longTsk3
和longTsk
之間的代碼沒有區別。
這里的關鍵是調用了same function
。
當調用相同的 function 時, the time cost is reduced
。
實際操作所花費的時間可以如下准確測量。
async function doForAll() {
const for1 = longTsk()
const for2 = longTsk3()
var date = Date.now()
await Promise.all([for1])
console.log(Date.now() - date); // 1784
date = Date.now()
await Promise.all([for2])
console.log(Date.now() - date); // 1789
}
longTsk & longTsk
的情況下,由於它已經被執行,所以下次調用它的成本似乎會降低。async function doForAll() {
const for1 = longTsk()
const for2 = longTsk()
var date = Date.now()
await Promise.all([for1])
console.log(Date.now() - date); // 1789
date = Date.now()
await Promise.all([for2])
console.log(Date.now() - date); // 1183
}
longTsk3
兩次,也可以獲得與上面完全相同的結果。async function doForAll() {
const for1 = longTsk3()
const for2 = longTsk3()
var date = Date.now()
await Promise.all([for1])
console.log(Date.now() - date); // 1784
date = Date.now()
await Promise.all([for2])
console.log(Date.now() - date); // 1185
}
換句話說,您的問題可以看出,當調用相同的 function 時,成本降低了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.