簡體   English   中英

使用 Javascript,您可以在一秒鍾內計數 += 1 多少次?

[英]How many times can you make count += 1 in one second with Javascript?

我正在嘗試測量我在一秒鍾內可以使“count = count + 1”多少次。 但是這個 function 破壞了瀏覽器。 任何人都可以說出它為什么會發生或有更好的方法來計算它?

function counter(){
   var count = 0;
   var trs = true;
   while(trs){
      count = count + 1;
      setTimeout(() => {trs = false;}, 1000);
   }
   console.log(count);
}

它崩潰的原因是由於無限循環。 JavaScript is event driven + single threaded and in JavaScript execution model, the function must finish before it yields control to another function. 因此,代碼while (trs) {...}永遠不會控制setTimeout中定義的 function,因為它永遠不會完成。 trs始終為true

關於 JavaScript 執行 model 工作原理的漂亮可視化: https://blog.avenuecode.com/understanding-the-javascript-concurrency-model

這是一個更好的方法:

function counter() {
  var count = 0
  var start = Date.now()
  var end = start + 1000
  while (Date.now() <= end) {
    count = count + 1
  }
  console.log(count)
}

那里有一個無限循環。 現在,由於 javascript 是單線程的,瀏覽器將在執行該無限循環時卡住,這可能會導致緩存很快填滿並導致崩潰(或不重新渲染任何內容)。

首先,一般來說,在調用while之前最好只創建一次setTimeout

   var count = 0;
   var trs = true;
   setTimeout(() => {trs = false;}, 1000);
   while(trs){
      count = count + 1;
   }
   console.log(count);

但是,這也會導致崩潰。

您可以嘗試以不同的方式測量操作,測量單個count = count + 1操作運行所需的時間,然后找出其中可以在一秒鍾內執行多少個操作(雖然它與連續運行 X 次不一樣)操作,其他參數可能會影響結果,但我假設您關心單個操作或您想要測量的單個 function)。

   var count = 0;
   var t0 = performance.now()
   count = count + 1;
   var t1 = performance.now()
   console.log(1000/(t1 - t0));

如果您希望它位於循環內,您還可以包括值檢查(使用 if), while在執行其塊之前會執行此操作。

   var count = 0;
   var trs=true;
   var t0 = performance.now()
   if(trs==true){
      count = count + 1;
   }
   var t1 = performance.now()
   console.log(1000/(t1 - t0));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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