【问题标题】:Making firefox refresh images faster使Firefox刷新图像更快
【发布时间】:2010-05-26 10:04:22
【问题描述】:

我正在做一件事,我需要一个网页来从本地客户端计算机流式传输一系列图像。我在这里有一个非常简单的运行: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:无缓存 缓存指令:无缓存 缓存控制:无缓存 Pragma:无缓存 过期:0

【问题讨论】:

  • 当然,不要让它每 1/10 秒刷新一次图像......这太离谱了!如果您需要以 10 FPS 的速度运行,使用闪存
  • @anim 没有太多选择。就是这样或将我们限制在 IE 和 ActiveX 控件中。我的问题是为什么每个浏览器都可以处理它,但 FF。而且无需购买昂贵的 Flash 许可证(并学习如何使用它)
  • setTimeout(refreshImage, 100); - 不要将字符串传递给 setTimeout()
  • 没有选项是什么意思?您需要每 1/10 秒刷新一次的东西可能是什么?附言它在 FireFox 中对我来说完全正常,没有延迟,只是在我的项目列表中显示了大量的“图像”。
  • 我有一个可能行不通的疯狂想法,但我建议这样做,以便那里的一些大师可以开始一起破解一些东西。获取正在生成的图像并将其转换为矢量,然后使用 HTML5 的 <canvas> 标签在浏览器上绘制。

标签: javascript jquery image firefox


【解决方案1】:

延迟可能是由 Firefox 处理 DNS 查询的方式和对 IPv6 的支持造成的。

试试turning off IPv6 lookups 看看是否能解决延迟问题。

【讨论】:

  • 他使用的 URL 具有 IP 地址 (localhost),而不是名称,因此不应涉及 DNS 查找。 (对吧?)
  • 希望如此,但你永远不知道。这解决了过去很多“firefox 速度慢”的问题。
  • 他还说请求以恒定速率进入服务器,所以看起来不太可能是网络问题。
  • 是的,它也在本地主机上完成,所以没有网络延迟
【解决方案2】:

好吧,事实证明这是 Firefox 的众多漏洞之一。我的 Firefox 会话运行了好几天。我刚刚重新启动它并打开了页面,它(和其他 javascript 内容)运行速度加快。随着它重新启动,我现在可以降低到甚至 50 毫秒的刷新率,尽管这不是必需的。

因此,除了每隔一段时间重新启动 firefox 之外,并没有真正的“修复”这个问题。

【讨论】:

    【解决方案3】:

    也许你已经尝试过了;您说您尝试过“双缓冲”,但这并不完全相同。与其拥有一个您更新“src”的<img> 标签,不如拥有几个(也许是10 个)。将它们全部启动“显示:无”。处理 <img> 标记上的“加载”事件,该函数隐藏除自身之外的所有其他 <img>。让您的间隔计时器(可能应该是一个间隔计时器,而不是类似的一系列超时)遍历标签列表,就像现在一样。

    这会让事情变得顺利吗?我不确定。我一定会尝试的。

    【讨论】:

    • 如果它是视频或其他东西(可能),但这是实时数据。人们在观看这些图像刷新时正在签署数字签名板(这是他们如何看待自己的签名被签名的方式),因此缓冲区之间额外的 200 毫秒无济于事,事实上它可能会使情况变得更糟。
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2012-05-13
    • 2015-11-01
    • 2010-12-10
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2018-01-24
    相关资源
    最近更新 更多