簡體   English   中英

當我用另一個類似的 function 替換 function 調用時,nodejs aync function 需要更多時間

[英]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

我第一次在這個屏幕截圖中運行 longTsk3 然后 longTsk

為什么用另一個類似的 function (longTsk3) 替換第二個 function 調用,需要多花 500 毫秒? 這個時間尺度可能會因機器而異,但是在同一台機器上運行的兩種情況下肯定會有很大的時間差異!

longTsk3longTsk之間的代碼沒有區別。

這里的關鍵是調用了same function
當調用相同的 function 時, the time cost is reduced

實際操作所花費的時間可以如下准確測量。

  1. 如果單獨完成,則需要相同的時間。
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
} 
  1. 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
}
  1. 即使連續調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM