gpt4 book ai didi

javascript - 在 javascript 中投票

转载 作者:行者123 更新时间:2023-11-30 08:56:30 26 4
gpt4 key购买 nike

我正在使用 [youtube api][1] 来了解视频何时完全缓冲 player.getVideoLoadedFraction()

当分数为 1 时,视频已完全缓冲,但我必须轮询此函数以检查它是否为 1,然后获取时间,如:

setInterval(display_fraction,1);

因为一个视频可能有几十分钟。

这个轮询是否会给浏览器/客户端带来沉重的负载,从而影响视频流?还有其他更好的轮询方法或方法来检测 youtube 何时完成缓冲吗?

顺便说一句,youtube api 的链接是: https://developers.google.com/youtube/flash_api_reference#Playback_controls

最佳答案

人类开始感知时间间隔介于 20 秒和 10 秒之间,因此尝试使用 1 毫秒的值进行轮询既没有必要也不可取(任何现代浏览器都会将其四舍五入为 5 毫秒或 10 毫秒)。 50 或 100 之类的值会更合适。

我还强烈建议使用 setTimeout 的链式系列调用而不是 setInterval打电话,像这样:

function onVideoReady(callback) {

// Do first check as soon as the JavaScript engine is available to do it
setTimeout(checkVideoReady, 0);

// Our check function
function checkVideoReady() {
if (videoIsReady) {
// The video is ready, notify calling code
callback();
}
else {
// Not ready yet, wait a 10th of a second
setTimeout(checkVideoReady, 100);
}
}
}

...然后您可以像这样使用它:

onVideoReady(function() {
// The video is ready, do something
});

我提倡链式系列的原因 setTimeout而不是 setInterval是:

  1. 您可以轻松地更改迭代之间的延迟。例如在上面的例子中,我在第一次 时尽快触发检查,然后在每次 100 毫秒后触发检查。你可以用时间做比这更复杂的事情,灵 active 就在那里。

  2. 由于代码必须显式触发下一个循环,因此无意中结束一个以上的循环要困难得多。

  3. setInterval关于它是从上次调用的开始还是从它的结束开始测量接口(interface),浏览器之间会有所不同。如果您使用上述模式,您始终可以确定它来自上次检查的结尾

  4. 如果您的代码在下一个间隔即将发生时仍在运行,它就会被跳过。这可能会导致间隙(例如,如果您每 100 毫秒执行一次操作,而您的前一个循环需要 102 毫秒才能完成,下一个循环不会尽快开始,它会等待剩余的 98 毫秒),至少在某些浏览器上是这样。

但这完全取决于您,当然,使用 setInterval 可以轻松完成上述操作和 clearInterval调用链 setTimeout电话。

关于javascript - 在 javascript 中投票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com