【问题标题】:secondary source if resource is not accessible如果资源不可访问,则为辅助来源
【发布时间】:2013-04-19 08:37:50
【问题描述】:

问题是这样的:我正在处理的项目中有一个小型板载服务器,运行速度有点慢,所以我想将包含的小型网站的图像移动到外部资源,如外部网络服务器;

问题是,我不确定当我访问 Internet 时是否始终连接到 Internet,也许我只会在 LAN 中。

所以我的问题是:如何为网页上的图像指定主要(外部)和次要/备份(本地)来源?所以如果用户连接到互联网,这会减轻小服务器的负载吗?

提前谢谢各位!

编辑:我在这里找到了答案: jQuery/JavaScript to replace broken images

-这是错误,带有直接重新分配图像的内联javascript函数! (很棒的东西)

干杯,来自互联网的好人,他们帮助有需要的人! ^^

【问题讨论】:

  • 您确定从互联网(如果您有连接)加载图像比从本地源加载图像更快吗?这听起来不太简单,您确定这是您实际问题(缓慢)的解决方案吗? (见meta.stackexchange.com/questions/66377/what-is-the-xy-problem
  • 我确定;我们谈论的是 Digi ConnectMe 9210 板载网络服务器;并不是说它很慢,而是连接多个客户端时它可能会变得非常慢,因为现在它运行平稳,因为我是唯一的一个;但是,将价值 530kb 的图形传输到每个可以连接的客户端有点多……另外,这个小家伙在最终设计中将连接到 3G 路由器,这样会破坏一些不那么便宜的带宽相当快...

标签: javascript jquery html performance


【解决方案1】:

你有加载失败时可以调用的onerror:

<img onerror="runSomeScriptThatReplacesThisImage()" ...

或:

<img onerror="this.src='yourOtherImage.jpg" ...

请小心,因为如果onerror 也失败了,你会得到一个循环。所以一定要避免这种情况。

【讨论】:

  • 这听起来很简单......你会不会碰巧知道它是否是一个跨浏览器的解决方案?
  • 我只是在调查它...当资源出现 404 时它会触发吗?
  • @AndreiChirtes 我不确定,你需要测试一下。但是我认为如果没有找到它也会触发onerror。
  • 我发现这篇文章解决了我遇到的部分问题,并且解决了浏览器支持问题:web.archive.org/web/20120904060007/http://lucassmith.name/2008/…
【解决方案2】:

您的图像目录将有两个 URL,例如

  1. //www.remote.com/images/
  2. ~/图片/

当会话开始时,您可以向远程服务器发出请求,如果请求超时或者您没有收到 200 响应,您可以使用本地 URL 库。我建议将其存储在会话变量中以便于访问。

【讨论】:

  • 感谢您的回答...您了解了基本概念,但我该怎么做?调用js函数等待200响应?
  • 我建议每个会话调用一次并将结果存储在会话或 cookie 中。这比每次尝试显示图像时等待错误要快得多。将 URL 库存储在 cookie 中,并通过 javascript 或一些服务器端脚本将其添加到您的 src="" 中。随你喜欢。
  • 这太天才了!谢谢!
【解决方案3】:

这可以在不使用任何 JavaScript 的情况下完成。

object element 可用于显示图像。如果引用的图像(在data 属性中)无法加载,则将使用object 的后备内容。现在,如果您包含另一个object,将尝试这个。最后一个应该包括替代的后备内容,例如描述图像的文本(类似于img 上的alt 属性)。

<object type="image/png" data="http://foo.example.com/external-image.png">
  <object type="image/png" data="/local-image.png">
    <!-- alternative text for the image (if even the local one cannot be loaded; for accessibility; etc.) -->
  </object>
</object>

【讨论】:

  • 这看起来很棒,我要测试一下!
  • 你知道这是否是一个跨浏览器的解决方案吗?我们的朋友 IE 的支持如何? ^^
  • @AndreiChirtes: object 本身 should be supported by almost all browsers,但我想这里的细节是魔鬼,每个浏览器是如何实现它的。抱歉,我没有任何经验。
  • np;我想我会选择 img 解决方案,因为它已经在网络上的其他项目中实施,所以有更多的文档;非常感谢您的回答! ^^
【解决方案4】:

我认为您最好的选择是使用 AJAX 检索图像。

然后,如果快速服务器出现故障,您可以回退到从慢速服务器检索它们。

【讨论】:

  • 为什么是ajax?您可以确定连接服务器端,所以使用 ajax 的决定本身就不会出现吗?检查连接,如果没有选择 image_slow,如果有则选择快速图像。这可以通过 ajax 完成,但也可以在没有它的情况下完成。
  • 你怎么知道即使“慢”服务器不能从客户端访问到另一台服务器?有缺陷的推理。
  • 我实际上更喜欢客户端解决方案......原因是板载服务器不支持任何“经典”服务器端脚本,所以基本上它所做的就是它使用编译为半服务器端解决方案的 javascript 和 C 文件......这真的很糟糕,但我必须使用我所拥有的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多