计算函数 fps 的函数
function to calculate function fps
好的,我相信我可以通过代码最好地描述问题,所以这里开始
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)
并具有函数 return 一个值,例如
var fps = FPS(clicking);
然后我可以这样显示 returned 号码
element.innerHTML = fps
编辑:
我知道当前的代码看起来很愚蠢,但这只是示例编码,而不是我实际使用的代码
回答原问题:
Okay so to clarify I dont want to add a variable to the actual function clicking I would like to be able to call something like FPS(clicking) and have the function return a value for example
首先,您需要 return 来自 clicking
函数的值,或您计划传递给 FPS
方法的任何函数。
var clicks = 0;
//function to calculate
function clicking(){
clicks += 1;
return clicks;
}
然后在您的 FPS
函数中,您还需要 return 该值。
//function to calculate fps where fn is the name of the function
function FPS(fn){
//do stuff
return fn();
}
这不是很实际,因为 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通常指的是Frames Per Second也就是刷新屏幕图像的频率。
为队友取一个更全面的名称,关键字如 Elapsed。
如果你想知道"how fast the functions runs":
/**
* 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;
}
这里是一些伪代码,可以得到我认为您正在寻找的东西 - 假设您有一个游戏循环并且您在游戏循环中调用 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) 将在游戏中的任何位置被调用以代替原始函数,以查看该函数每秒被调用了多少次。
您可以将 FPS return 设为 DOMHighResTimeStamp(适用于 IE 10+、Firefox 15+、Chrome 20+、Safari 8+),这将 return时间以毫秒为单位。如果你想让它在旧的浏览器中工作,你可以用 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!");
好的,我相信我可以通过代码最好地描述问题,所以这里开始
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)
并具有函数 return 一个值,例如
var fps = FPS(clicking);
然后我可以这样显示 returned 号码
element.innerHTML = fps
编辑: 我知道当前的代码看起来很愚蠢,但这只是示例编码,而不是我实际使用的代码
回答原问题:
Okay so to clarify I dont want to add a variable to the actual function clicking I would like to be able to call something like FPS(clicking) and have the function return a value for example
首先,您需要 return 来自 clicking
函数的值,或您计划传递给 FPS
方法的任何函数。
var clicks = 0;
//function to calculate
function clicking(){
clicks += 1;
return clicks;
}
然后在您的 FPS
函数中,您还需要 return 该值。
//function to calculate fps where fn is the name of the function
function FPS(fn){
//do stuff
return fn();
}
这不是很实际,因为 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通常指的是Frames Per Second也就是刷新屏幕图像的频率。
为队友取一个更全面的名称,关键字如 Elapsed。
如果你想知道"how fast the functions runs":
/**
* 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;
}
这里是一些伪代码,可以得到我认为您正在寻找的东西 - 假设您有一个游戏循环并且您在游戏循环中调用 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) 将在游戏中的任何位置被调用以代替原始函数,以查看该函数每秒被调用了多少次。
您可以将 FPS return 设为 DOMHighResTimeStamp(适用于 IE 10+、Firefox 15+、Chrome 20+、Safari 8+),这将 return时间以毫秒为单位。如果你想让它在旧的浏览器中工作,你可以用 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!");