我有一个简单的HTML页面,其中包含一些JavaScript,它可以连续从图像中提供图像控件。我担心的是,当我使用谷歌浏览器,并且正在查看资源时,它会反复填充相同的图像文件名 - 每一个新的刷新图像似乎都在创建一个副本。我是否应该担心重复图像下载过多?
我应该为此担心吗?是否有可能发生某些事情,如缓存已满或沿着这些行发生了什么?或者浏览器是否会尊重这一点并相应地处理它?
就在我输入这个问题时,谷歌浏览器的开发面板在我的这个页面上消失了,就好像它实际上超载了图像一样。所以我认为这不好。然而,图像流仍按设计继续工作。
目前,它是每秒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]
,这样缓存就会认为它是一个新图像。
您可以通过在查询字符串中使用除camurl
之外的另一图像URL,在网络上的任何图像上实际测试此项。不一定非得是相机才能测试这种情况。
UPDATE
现在20小时运行后,我没有任何问题,都在3 fps的帧速率的网络浏览器(谷歌浏览器)。这是~3600帧,每个〜165KB。因此,这使得它下载了超过半个gig - 在浏览器中根本没有问题。但是开发工具在开启后不到30分钟就崩溃了。
所以这是正常的行为,并且每个图像确实被缓存。但浏览器应该能够处理,如果它崩溃,我会感到惊讶。 – bfavaretto 2013-05-09 00:39:46
这就是我期望听到的,我只是寻找技术洞察力,为什么它会/不会工作。 – 2013-05-09 00:40:31
这将是一个硬盘问题我认为,我不认为有任何内存(是的,除了指针) – Sebas 2013-05-09 00:46:32