是否可以测量所有浏览器都支持的小于 1 毫秒的时间间隔,我只知道 Chrome 中的一种方法。
镀铬方法:window.performance.now()
目前我在毫秒时间空间内进行 FPS 测量,但如果通过的时间少于 1 毫秒,我会得到无穷大,因为这两个数字四舍五入到最接近的毫秒,所以它们是相同的值。
有谁知道跨浏览器函数在 javascript 中计算小于 1 毫秒的时间间隔?
是否可以测量所有浏览器都支持的小于 1 毫秒的时间间隔,我只知道 Chrome 中的一种方法。
镀铬方法:window.performance.now()
目前我在毫秒时间空间内进行 FPS 测量,但如果通过的时间少于 1 毫秒,我会得到无穷大,因为这两个数字四舍五入到最接近的毫秒,所以它们是相同的值。
有谁知道跨浏览器函数在 javascript 中计算小于 1 毫秒的时间间隔?
这是您在没有准确计时器的情况下如何获得准确测量的方法,只要您的计时经常发生,我希望他们在您的情况下这样做。
平均/汇总事件持续时间的不精确测量。我的一个项目中的一个片段:
var start = Date.now();
... (stuff to be timed)
var now = Date.now();
if (DEBUG.enabled) {
var profile_this_iter = now - start;
profile += (profile_this_iter - profile) * 0.02;
}
每个新的值测量值都会使您的读数更接近 0.02 倍。显然你会想要稍微调整一下。如果您读取一半时间 1 毫秒和一半时间 0 毫秒的持续时间(使用 1 毫秒分辨率计时器),这将允许您读取徘徊在 0.5 毫秒左右的平均值。
这显然不能替代适当的更高分辨率计时器。但是我使用这个简单的算法来给我的 javascript 项目一个非蹩脚的 FPS 读数。你会得到一个阻尼因子,你可以根据你是想要更准确还是更直接地响应变化来调整它。考虑到这一点的简单性,您将很难找到一种更优雅的算法来为您提供良好的表示,而无需任何改进的输入数据。增强它的方法之一是根据采样本身的频率(如果发生变化)调整接近因子(即 0.02 常数),这样可以使较慢的测量速率比固定值更快地收敛.
实际上还有另一种计算fps的方法,这可能是解决这个问题的一种方法。就是统计一秒的实际帧数,我觉得应该挺准确的。
var fpsStart = new Date().getTime();
var fpsCounting = 0;
var fps = 0;
start_the_first_frame();
// Loop
function update(){
do_time_consuming_stuff();
fpsCounting++;
var thisFrame = new Date().getTime();
if(thisFrame - fpsStart >= 1000){
fpsStart += 1000;
fps = fpsCounting;
fpsCounting = 0;
}
request_next_animation_frame();
}
PS 刚刚在此处输入,未经测试,可能需要稍作更改。
我记得在lwjgl教程中看到过这样的方法......
也正如@StevenLu 所指出的,您可以修改它以计算 0.5 秒内的帧数并将“fps”乘以 2,甚至更短的时间(例如 0.25 秒),以便更频繁地更新 fps 值.
Chrome 20 中提供了高分辨率时间,但您应该知道,JS 中的时间分辨率取决于浏览器、设备和环境。它可能在 4ms 和 1000+ms 之间变化