函数来计算函数fps

时间:2016-07-13 02:52:41

标签: javascript frame-rate

好的,所以我相信我可以通过代码最好地描述这个问题,所以这里是

<code>

好的,所以澄清一下我不想在实际函数var clicks = 0; //function to calculate function clicking(){ clicks += 1; } //function to calculate fps where fn is the name of the function function FPS(fn){ //do stuff } 中添加变量我希望能够调用类似的东西 clicking并让函数返回一个值,例如

FPS(clicking)

然后我可以显示返回的数字 var fps = FPS(clicking);

修改 我知道目前的代码似乎很愚蠢,但这只是示例编码而不是我实际使用的

5 个答案:

答案 0 :(得分:2)

这不是很实际,因为Date.now()也使用时间。

function FPS(fn) {
  var startTime = Date.now();
  fn();
  var endTime = Date.now();

  return endTime - startTime;
}

function longClick() {
  var abc = 0;
  for (var i = 0; i < 100000000; i++) {
    abc++;
  }
}

var fps = FPS(longClick);
console.log((fps / 1000) + ' seconds');

FPS 通常是指每秒帧数,这是刷新屏幕图像的频率。

为队友选择一个更全面的名称,其中包含 Elapsed 等关键字。

答案 1 :(得分:0)

回答原来的问题:

  

好的,所以澄清我不想在实际功能中添加一个变量点击我希望能够调用FPS(点击)这样的函数并让函数返回一个值,例如

首先,您需要从clicking函数或您计划传递给FPS方法的任何函数返回一个值。

var clicks = 0;

//function to calculate
function clicking(){
    clicks += 1;
    return clicks;
}

然后在FPS函数中,您还需要返回该值。

//function to calculate fps where fn is the name of the function
function FPS(fn){
    //do stuff
    return fn();
}

答案 2 :(得分:0)

如果你想知道“功能运行的速度”:

/**
 * Return the execution time of a function
 * @param {Function} fn The function to execute
 */
function FPS(fn) {
  var start = new Date().getTime();
  fn();
  var end = new Date().getTime();
  return end - start;
}

答案 3 :(得分:0)

这里有一些伪代码可以获得我认为你正在寻找的东西 - 假设你有一个游戏循环并且你在游戏循环中调用FPS。正如我所说 - 有关游戏细节(如组件)的更多细节会有所帮助。

var clicks = 0;
var fps = 0;
var elapsedTime;

//function to calculate
function clicking(){
  clicks += 1;
}

//function to calculate fps where fn is the name of the function
function FPS(fn){
  // Get start time
  //call fn
  // Get stop time
  // var delta = stop time - start time
  // elapsedTime += delta;
  // fps++;
  // If elapsedTime > 1 second 
  // then while elapsedTime > 1 second... elapsedTime -= 1 second and fps = 0;
  // We use the while loop here in the event that it took more than 1 second in the call
  // But you could just reset elapsedTime back to 0
}

此FPS(fn)将在游戏中的任何位置调用,而不是原始函数,以查看该函数被调用的次数。

答案 4 :(得分:0)

你可以让FPS返回DOMHighResTimeStamp(适用于IE 10 +,Firefox 15 +,Chrome 20 +,Safari 8+),它将以毫秒为单位返回时间。如果您希望它在旧版浏览器中工作,您可以使用Date(new Date())对象替换精确计时,但Date对象只会以秒为单位(而不是毫秒):

var clicks = 0;

//function to calculate
function clicking(){
  clicks += 1;
}

//function to calculate fps where fn is the name of the function
function FPS(fn){
  var start = performance.now();
  fn();
  return performance.now() - start;
}

console.log("Function took " + FPS(clicking) + " milliseconds!");