我正在做的事情,我需要一个网页来从本地客户端计算机流式传输一系列图像。我在这里有一个非常简单的运行:http://jsbin.com/idowi/34
代码非常简单
setTimeout ( "refreshImage()", 100 );
function refreshImage(){
var date = new Date()
var ticks = date.getTime()
$('#image').attr('src','http://127.0.0.1:2723/signature?'+ticks.toString());
setTimeout ("refreshImage()", 100 );
}
基本上我在客户端计算机上使用了签名板。我们希望签名显示在网页中,并让他们看到自己在网页中签名(垫片没有LCD显示在那里)。所以我设置了一个简单的本地HTTP服务器,它抓取了签名板当前状态的图像并将其发送到浏览器。
这在任何浏览器中都没有问题(在IE7,8和Chrome中测试过),但在Firefox中,它非常迟钝和跳跃,并且不符合10 FPS速率。有没有人有任何想法如何解决这个问题?我尝试在javascript中创建非常简单的双缓冲,但这让事情变得更糟。
另外,对于更多信息,似乎Firefox正在以正确的帧速率执行javascript,因为在服务器上请求以恒定速度进入。但图像只是不一致地刷新,从每秒5次一直到每秒0次(需要2秒才能刷新)
此外,我尝试使用不同的图像格式,但结果相同。我尝试过的格式包括位图,PNG和GIF(GIF虽然在Chrome中引起了一个小问题但闪烁)
Firefox是否有可能以某种方式缓存我的图像导致轻微的延迟?我发送这些标题:
Pragma-directive: no-cache Cache-directive: no-cache Cache-control: no-cache Pragma: no-cache Expires: 0
答案 0 :(得分:1)
滞后可能是由Firefox处理DNS查询和支持IPv6的方式引起的。
尝试turning off IPv6 lookups,看看是否能解决滞后问题。
答案 1 :(得分:1)
好的,事实证明这是Firefox的众多漏洞之一。我让我的firefox会话运行了好几天。我刚刚重新启动它并打开了页面,它(以及其他javascript的东西)跑得很快。重新启动后,我现在可以降低甚至50ms的刷新率,尽管这不是必需的。
除了每隔一段时间重启一次firefox之外,没有真正解决这个问题。
答案 2 :(得分:0)
也许你已经尝试过了;你说过你曾试过“双缓冲”,但这并不完全一样。而不是让你更新的“src”有一个<img>
标签,而是有几个(10个,也许)。启动它们“display:none”。处理<img>
标签上的“加载”事件,其功能隐藏除了自身以外的所有其他<img>
。让你的间隔计时器(可能是一个间隔计时器,而不是那样的一系列超时)迭代标签列表,就像现在一样。
这会让事情顺利吗?我不确定。我当然会尝试。