V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
evlos
V2EX  ›  程序员

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

  •  
  •   evlos · 2012-08-10 13:09:32 +08:00 · 4540 次点击
    这是一个创建于 4479 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设我们有多个图床节点,但是都有流量限制或者不稳定。
    假设图床节点储存的图片文件是同步的。
    假设我们用的是 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=
    23 条回复    1970-01-01 08:00:00 +08:00
    icyflash
        1
    icyflash  
       2012-08-10 13:15:00 +08:00   ❤️ 1
    存的时候不用绝对地址不就好了。 {0}wp-content/uploads/2012/06/02601_eveningsinglesunray_2560x1600.jpg,输出的时候format一下
    qq286735628
        2
    qq286735628  
       2012-08-10 13:18:33 +08:00
    之前我做一个项目,用到html5的manifest里面的fallback,也是有计划用302做跳转,这样就可以固定url,统一在一个接请求的地方修改配置即可。

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

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

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

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

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

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

    - - XHR+302 的确感觉有点诡异。。看样子 302 (非wordpress),短代码(wordpress)两种方法都不错。
    aveline
        6
    aveline  
       2012-08-10 13:35:04 +08:00   ❤️ 1
    @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
        7
    evlos  
    OP
       2012-08-10 13:40:16 +08:00   ❤️ 2
    @aveline 这。。这直接在前端操作。。好厉害的想法!!这个可以有! OwO
    额,那个,话说这里应该用 $(this).data('image'); 吧。 =w=
    aveline
        8
    aveline  
       2012-08-10 14:04:33 +08:00
    @evlos 额...我一直是attr的...out了...
    evlos
        9
    evlos  
    OP
       2012-08-10 14:05:32 +08:00
    @aveline 啊啊是新版本的特性啦 =w=
    CupTools
        10
    CupTools  
       2012-08-10 14:25:43 +08:00
    @evlos 你最近死去哪了,讨厌~
    evlos
        11
    evlos  
    OP
       2012-08-10 14:28:30 +08:00
    @CupTools 自重 =w=。这不是一直在嘛。
    CupTools
        12
    CupTools  
       2012-08-10 14:37:17 +08:00
    @evlos 你没有找我,讨厌~
    evlos
        13
    evlos  
    OP
       2012-08-10 14:41:34 +08:00
    @CupTools - = 额,越来越懒了嘛。
    evlos
        14
    evlos  
    OP
       2012-08-10 14:42:04 +08:00
    擦,这段对话怎么这么 yooooo 。。。。。。
    aveline
        15
    aveline  
       2012-08-10 14:45:25 +08:00
    @evlos 我也要和你搅基
    @CupTools 来3P吧XD
    CupTools
        16
    CupTools  
       2012-08-10 14:46:18 +08:00
    @evlos 你怎么不上IM了
    @aveline 把菊花洗干净没有
    evlos
        17
    evlos  
    OP
       2012-08-10 14:50:49 +08:00
    @aveline @CupTools 你们都给我自重 >A<

    @CupTools 啊啊,年初刚换 MAC 的时候用 message 登录了 gtalk,后来没怎么用就给忘记了 >~<。刚刚弄好了 =w=
    aveline
        18
    aveline  
       2012-08-10 15:03:41 +08:00
    @evlos 求联系方式!加我Gtalk嘛 [email protected]
    master
        19
    master  
       2012-08-11 02:07:28 +08:00   ❤️ 1
    话说为啥要这么麻烦呢。。。直接在webserver里面把uploads目录的请求rewrite不就好了吗。。。。。
    evlos
        20
    evlos  
    OP
       2012-08-11 03:26:27 +08:00
    @master 好球!这下数据库都不用改了 OwO
    liyandong
        21
    liyandong  
       2012-08-11 09:57:58 +08:00
    伪静态重写!
    CupTools
        22
    CupTools  
       2012-08-11 13:38:52 +08:00
    @evlos 你Message ID多少,GT老不上
    evlos
        23
    evlos  
    OP
       2012-08-11 14:08:32 +08:00
    @CupTools 睡觉时间怎么上 - -。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5286 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:45 · PVG 13:45 · LAX 21:45 · JFK 00:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.