关于用 302 跳转来切换图床节点的效率问题

2012-08-10 13:09:32 +08:00
 evlos
假设我们有多个图床节点,但是都有流量限制或者不稳定。
假设图床节点储存的图片文件是同步的。
假设我们用的是 Wordpress,图片是以下面的形式混合文章文本在数据库里储存在一起的。

<img src="http://www.rainmoe.com/wp-content/uploads/2012/06/02601_eveningsinglesunray_2560x1600.jpg" alt="" title="02601_eveningsinglesunray_2560x1600" width="960" height="284" class="alignnone size-full wp-image-2418" />

如果要切换图床,需要用 sql 在数据库里面批量替换上面 img 标签中的 url。这是普遍的做法,但是我在想能不能换个思路。
比如把上面 img 标签中的地址变成这样。

http://www.rainmoe.com/302.php?y=2012&m=06&f=02601_eveningsinglesunray_2560x1600.jpg

浏览器读取的时候用 302.php 跳转到目标图床节点的地址。
这样如果频繁切换图床节点(极端状况下),数据库就木有鸭梨鸟。
之前测试了一下这样是可行的。

但是不知道客户端的效率问题怎么样(浏览器进一个页面会发生十几次302跳转)?
服务器端应该没问题,毕竟就发个header。

不知道大家有什么想法 =w=
4540 次点击
所在节点    程序员
23 条回复
icyflash
2012-08-10 13:15:00 +08:00
存的时候不用绝对地址不就好了。 {0}wp-content/uploads/2012/06/02601_eveningsinglesunray_2560x1600.jpg,输出的时候format一下
qq286735628
2012-08-10 13:18:33 +08:00
之前我做一个项目,用到html5的manifest里面的fallback,也是有计划用302做跳转,这样就可以固定url,统一在一个接请求的地方修改配置即可。

我上次操作的时候,因为都是XHR请求,这种请求对302的处理有点诡异,最后就没继续这样做,改用其他方法了。

你的需求只是对图片进行302,应该没什么问题。

不过一个页面如果有很多张图片,意味这客户端的请求数多了一倍。

/t/44214
qq286735628
2012-08-10 13:19:53 +08:00
或者还有一个方法,专门设置一个子域名,为图床。
然后子域名对应的目录格式不改变。

每次更换图床,修改DNS的记录即可。
evlos
2012-08-10 13:22:50 +08:00
@icyflash 啊啊这的确是一个好方法,不好意思我木有说清楚,还假设图床节点中存在一个 amazon s3,那么可能就没办法用相同的 url 结构了。

但是还是要多谢你的思路。这样的话可以用 wordpress 的短代码功能,存的时候存成 [img y="2012" m="06" f="02601_eveningsinglesunray_2560x1600.jpg"]
evlos
2012-08-10 13:30:10 +08:00
@qq286735628 嗯嗯,子域名也是一个好办法,但是前提是图床要支持绑定域名才行,稍微有点局限性,因为比如 v2ex 用的就是新浪微博相册。

- - XHR+302 的确感觉有点诡异。。看样子 302 (非wordpress),短代码(wordpress)两种方法都不错。
aveline
2012-08-10 13:35:04 +08:00
@evlos 不然这样?

<img src="placeholder.png" data-image="/img.png" class="image1" />

<script>
$(function () {
$('img.image1').each(function() {
$(this).attr('src', 'http://xxyyzz/x0' + $(this).attr('data-image'));
})
})
</script>
evlos
2012-08-10 13:40:16 +08:00
@aveline 这。。这直接在前端操作。。好厉害的想法!!这个可以有! OwO
额,那个,话说这里应该用 $(this).data('image'); 吧。 =w=
aveline
2012-08-10 14:04:33 +08:00
@evlos 额...我一直是attr的...out了...
evlos
2012-08-10 14:05:32 +08:00
@aveline 啊啊是新版本的特性啦 =w=
CupTools
2012-08-10 14:25:43 +08:00
@evlos 你最近死去哪了,讨厌~
evlos
2012-08-10 14:28:30 +08:00
@CupTools 自重 =w=。这不是一直在嘛。
CupTools
2012-08-10 14:37:17 +08:00
@evlos 你没有找我,讨厌~
evlos
2012-08-10 14:41:34 +08:00
@CupTools - = 额,越来越懒了嘛。
evlos
2012-08-10 14:42:04 +08:00
擦,这段对话怎么这么 yooooo 。。。。。。
aveline
2012-08-10 14:45:25 +08:00
@evlos 我也要和你搅基
@CupTools 来3P吧XD
CupTools
2012-08-10 14:46:18 +08:00
@evlos 你怎么不上IM了
@aveline 把菊花洗干净没有
evlos
2012-08-10 14:50:49 +08:00
@aveline @CupTools 你们都给我自重 >A<

@CupTools 啊啊,年初刚换 MAC 的时候用 message 登录了 gtalk,后来没怎么用就给忘记了 >~<。刚刚弄好了 =w=
aveline
2012-08-10 15:03:41 +08:00
@evlos 求联系方式!加我Gtalk嘛 a@loli.vg
master
2012-08-11 02:07:28 +08:00
话说为啥要这么麻烦呢。。。直接在webserver里面把uploads目录的请求rewrite不就好了吗。。。。。
evlos
2012-08-11 03:26:27 +08:00
@master 好球!这下数据库都不用改了 OwO

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/44783

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX