【问题标题】:Make the browser pool for an image until available为图像创建浏览器池直到可用
【发布时间】:2012-06-03 13:52:10
【问题描述】:

我有一个小型 http 服务器,可以即时生成一些图像,生成过程可能需要一些时间。生成后,图像被无限缓存。

目前,如果用户请求未缓存的图像,服务器会返回带有Refresh 标头的202 Accepted。如果图像被缓存,则发送301 Permanently Moved 并将用户重定向到唯一的 url(不同的图像可能共享相同的唯一 url)。

如果图像在<img> 标签中被引用(至少在 Firefox 上),整个系统就会中断。这可以在没有 Javascript 的情况下解决吗?如果没有,脚本会是什么样子?

【问题讨论】:

  • 您不能在处理时阻止请求,并在准备好时直接用实际图像回答吗?您的图像生成需要多长时间?
  • 这取决于。有些图像可能需要几分钟才能生成,而另一些则只需几秒钟。阻止不是一种选择。
  • 您是否尝试过使用 http 200 OK 和 Refresh 标头。 (202 更有意义,但以防万一……)
  • 刚试过。不工作:(
  • 为什么不能选择完全阻止?在真正释放刷新响应之前,您是否可以至少阻塞 10 秒以减少对服务器的重复请求量?

标签: javascript html http http-headers image-generation


【解决方案1】:

我不确定你是否可以在没有 Javascript 的情况下做到这一点,但你可以用 ajax 做到这一点?我的意思是,指向服务器,然后检查它是否在那里......然后如果它显示它,否则 30 秒后再试一次,它可能是这样的:

function getImage(img) {
 $.ajax({
            cache: true,
            url: <<ADDRESS>>,
            data: "",
            timeout: 60,
            error: function (jqXHR, error, errorThrown) {
                setTimeout(function() {
                    getImage(img);
                }, 30000);
            },
            success: function (data) {
                //set the image
            }
        });
}

好的,你希望图像会在某个时候下降。

唯一的其他选择是在请求图像之前生成图像?例如,如果它只是为照片库创建缩略图,为什么要等到它被请求生成它?一有就生成?

希望能有所帮助/有意义。

【讨论】:

  • 太棒了!如果error/sucessstatusCode {202: ..., 301: ...} 替换,那么它应该可以在当前系统上工作。
  • 希望错误或 jqXHR 对象应该为您提供实际的错误代码(在 Google Chrome 中使用 console.log,这有助于查看对象中的内容等)
  • +1 对于可行的解决方案,但阻止请求确实是一个更好的选择 - 即使阻止需要等待 5 分钟,它仍然会比使用此代码返回更快(因为它会尽快返回随着生成完成,而不是在 30 年代之后的民意调查)。它只会阻止有问题的图像,而不是页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多