我有一个带有一些 javascript 的简单 HTML 页面,它不断地为图像控件提供来自相机的图像。我担心的是,当我在 Google Chrome 中查看资源时,它会一遍又一遍地填充相同的图像文件名 - 每个新刷新的图像似乎都在创建一个副本。
我应该担心这个吗?是否有可能发生某些事情,例如缓存已满或类似的事情?或者浏览器会尊重这一点并相应地处理它?
刚才,当我输入这个问题时,谷歌浏览器的开发面板在我的这个页面上消失了,好像它确实被图像超载了。所以我假设这不好。然而,图像流确实继续按设计工作。
目前它每秒 2 帧,这是我的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Camera View</title>
<script type="text/javascript" language="javascript">
var camurl = "";
var fps = 1;
var loop = null;
onload = function() {
camurl = getParameterByName('camurl');
fps = getParameterByName('fps');
LoopProc();
}
onunload = function() {
if (loop != null)
clearTimeout(loop);
}
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
function DelayTime() {
if (fps < 1) fps = 1;
return (1000 / fps);
}
function NewUrl() {
return camurl + "#time=" + new Date().getTime();
}
function LoopProc() {
document.getElementById("CamImage").src = NewUrl();
loop = setTimeout('LoopProc();', DelayTime());
}
</script>
</head>
<body>
<img id="CamImage" src="" alt="" />
</body>
</html>
以及对该页面的示例调用:
http://localhost:8081/?fps=2&camurl=http://192.168.1.150/image.jpg
请注意,我在缓存中使用了一个技巧 - 在NewUrl()
我添加的函数#time=[datetime]
中,缓存会认为它是一个新图像。
您可以在网络上的任何图像上实际测试这一点,方法是使用查询字符串中的另一个图像 URL camurl
。不一定必须是相机来测试这种情况。
更新
现在运行 20 小时后,我在网络浏览器(谷歌浏览器)中以 3 fps 的帧速率完全没有问题。那是约 3,600 帧,每个约 165 KB。因此,它下载了超过一半的演出 - 浏览器完全没有问题。但是开发工具在打开后不到 30 分钟就崩溃了。