类似知乎等的图片服务域名采用 zhimg.com 而不是 img.zhihu.com,有什么优点吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Velocity Beijing 2015
O'Reilly Velocity
Web Performance and Operations
http://velocityconf.com/
YSlow
Best Practices for Speeding Up Your Web Site
sincway
V2EX    Velocity

类似知乎等的图片服务域名采用 zhimg.com 而不是 img.zhihu.com,有什么优点吗

  •  4
     
  •   sincway 2015-02-14 17:11:57 +08:00 18380 次点击
    这是一个创建于 3892 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Google 等也喜欢这么干,类似 googlevideo.com、google-analytics.com 等域名用来分管某个服务。这样做的好处是什么?应该不只是偏好问题吧?

    感觉这样做应该有原因的,子域名也可以单独指定 NS 记录的,用起来和顶级域名区别也不大..

    另外在自己开发 App 时只用一个域名有缺点吗?Thanks
    49 条回复    2015-03-04 15:31:42 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       2015-02-14 17:15:25 +08:00   10
    如果 Cookie 的数据量很大,那么用单独的图片域名就不会需要在每一个图片请求时都包括 cookie 数据,可以节约流量,提高性能。
    14ly
        2
    14ly  
       2015-02-14 17:17:22 +08:00   1
    感觉以前有类似帖子?还有单域最高并发限制和安全因素
    msg7086
        3
    msg7086  
       2015-02-14 17:17:56 +08:00   1
    防止cookie在子域名上发送。
    msg7086
        4
    msg7086  
       2015-02-14 17:18:40 +08:00
    (是不是应该加一句欢迎回到地球→_→
    sincway
        5
    sincway  
    OP
       2015-02-14 17:20:22 +08:00
    @msg7086 好吧。还是学生,对大项目接触不多,没想到这个...
    KyonLi
        6
    KyonLi  
       2015-02-14 17:20:28 +08:00 via Android   2
    国内的话可能有一部分监管的原因吧,如果有一个子域名下出现不和谐内容可能导致整个挂掉,用不同主域名可以规避这样的问题
    a2z
        7
    a2z  
       2015-02-14 17:23:57 +08:00   1
    利用同源策略,安全。
    skybr
        8
    skybr  
       2015-02-14 17:30:42 +08:00   2
    除了上面几位说的, 还有就是浏览器对同一个域的并发数有限制.
    zhicheng
        9
    zhicheng  
       2015-02-14 17:35:27 +08:00 via Android   31
    能回答出 Cookie 的,给 2 分。能补充浏览器连接数限制的,加 2 分。能再补充 TCP慢启动的(这是缺点)加 3 分。能再补充浏览器渲染之类的,再加 3 分。至今仍没有人答出来过,虽然面过的前端不多。
    =========
    这是我常用的面试题,在一个 thread 里回复过。
    Gary
        10
    Gary  
       2015-02-14 17:36:33 +08:00   1
    浏览器对同一个域的并发限制
    weisoo
        11
    weisoo  
       2015-02-14 17:37:38 +08:00
    什么cookie什么并发数量,都不重要,重要原因就是6楼所说的
    BlueFly
        12
    BlueFly  
       2015-02-14 17:38:40 +08:00
    @zhicheng 惨了,连@Livid 都2分严重低分这怎么破?
    sincway
        13
    sincway  
    OP
       2015-02-14 17:39:04 +08:00
    @zhicheng 请问和浏览器渲染有什么关系呢?
    sincway
        14
    sincway  
    OP
       2015-02-14 17:40:23 +08:00   1
    @weisoo Youtube 也有 ytimg.com 的... 它不需要考虑什么监管吧
    nsa
        15
    nsa  
       2015-02-14 17:49:09 +08:00 via iPad
    @BlueFly 规则和技术也是会更新的,也给你2分,呵呵,够么?不够再随便加,和印钞票似的。。
    zhicheng
        16
    zhicheng  
       2015-02-14 17:50:40 +08:00 via Android
    @BlueFly Cookie 已经对了~
    @sincway 你可以研究一下 HTML 里边引用资源的位置和响应速度对整个页面的影响,以及HTTP协议的特点。
    zhicheng
        17
    zhicheng  
       2015-02-14 17:52:33 +08:00 via Android
    显然Cookie是有性能和安全双重影响的。
    xiezefan
        18
    xiezefan  
       2015-02-14 17:55:17 +08:00
    @zhicheng Hi, 能科普下这个和 TCP慢启动 有什么关系么? 科普了下 TCP慢启动指在建立连接后,主键增加数据包的发送量, 以防止出现大量数据包造成网络堵塞的问题. 暂时联想不到这个这个问题的关系
    s51431980
        19
    s51431980  
       2015-02-14 17:59:17 +08:00
    我感觉楼主问的主要是 “用 zhimg.comimg.zhihu.com ”,所以 cookie 是主要考虑因素

    如果问“用 img.zhihu.com/some.jpgzhihu.com/some.jpg ”,连接数才是主要考虑因素

    @Livid 的答案足够了
    kaneg
        20
    kaneg  
       2015-02-14 18:10:32 +08:00 via iPhone
    子域名应该和主域名的连接数是分开控制的吧
    anouser
        21
    anouser  
       2015-02-14 18:16:15 +08:00
    @zhicheng 详细说说对浏览器渲染有啥影响?没理解,至于css Javascript放到html头还是尾和域名用啥是两回事吧。

    浏览器有并发限制,动态内容用一个域名,静态内容用一个域名会加快资源的载入速度且不会阻塞。
    当然,你还要考虑dns解析的时间,多一个域名,浏览器就要多解析一下。这在移动网络下是一个问题,尤其是你的网站是全球可访问的时候。chrome有dns预解析的技术,在桌面上这个问题不大。
    另外cookie不用发过去,加快访问速度,并且可以防止子网站出现漏洞,整个站点的session被劫持的影响。
    anjianshi
        22
    anjianshi  
       2015-02-14 18:30:21 +08:00   2
    https://developer.yahoo.com/performance/rules.html
    见 Use Cookie-free Domains for Components 小节,针对楼主的问题,说的已经很详细了
    raincious
        23
    raincious  
       2015-02-14 18:33:21 +08:00   5
    主要其实还是Cookie的问题。并发数只是另一方面,因为img.zhihu.com和zhihu.com被浏览器视为两个域名,会各自并发进行下载。

    zhimg.com是接收不到给zhihu.com设置的Cookie的,但是img.zhihu.com能收到,所以这是主要原因。

    http://stackoverflow.com/questions/1062963/how-do-browser-cookie-domains-work

    但这又是双刃剑了。DNS查询每个域名需要时间,HTTP需要重新启动握手请求等等。所以这不意味着你能滥用多域名并发的好处。

    > 另外在自己开发 App 时只用一个域名有缺点吗?Thanks

    这取决于你要怎么干了。如果你设置了xxxx.com的Cookie,这就意味着所有到达xxxx.com以及xxx.xxxx.com的HTTP访问都会被带上Cookie,显然这不利于优化。

    但是如果你仅仅只给比如app.xxxx.com设置了Cookie,那么无论是aaa.xxxx.com或bbb.xxxx.com又或是assets.xxxx.com还都是访问不到的。

    不过这样太麻烦了不是么?
    fising
        24
    fising  
       2015-02-14 18:34:35 +08:00 via iPad
    img.zhihu.comwww.zhihu.com 不是同一个域,应该没有浏览器并发限制吧?@zhicheng
    Showfom
        25
    Showfom  
    PRO
       2015-02-14 19:33:35 +08:00 via iPhone
    楼主还有一个事情 DNS 服务器其实不联系用同一个后缀的 参考 AWS ROUTE 53
    lyragosa
        26
    lyragos  
       2015-02-14 19:36:05 +08:00
    还好我们100人小网站界从来不考虑这种事情xd
    zhicheng
        27
    zhicheng  
       2015-02-14 20:33:45 +08:00
    @raincious @kaneg @s51431980
    知道一了,不知道有二?难道 yahoo 和 youtube 的 yimg.comytimg.com 用的是裸域?

    @anouser
    你需要非常仔细的补充一下 HTTP 方面的知识,如果之后还不明白,干脆当我在瞎掰吧。
    Smartype
        28
    Smartype  
       2015-02-14 21:01:45 +08:00 via iPhone
    @zhicheng 沟通,交流。共同成长。其实我也好奇这和浏览器渲染有什么关系。希望明示,瞎掰也愿意听听/看看
    denghongcai
        29
    denghongcai  
       2015-02-14 21:23:31 +08:00
    @zhicheng 我也好奇,希望明示
    zhicheng
        30
    zhicheng  
       2015-02-14 21:27:11 +08:00   18
    @Smartype
    那我简单说一下,HTTP 协议 的特点是无状态,所以 HTTP 协议只能做到,
    请求1->回复1->请求2->回复2
    在 keep-alive 的时候就没有这么弱了,但依然受限于 HTTP 无状态,只能做到 ,
    请求1->请求2->回复1->回复2

    那么为什么这和浏览器渲染有关系,其实没关系,如果你设计得好。但设计得不好就有关系了,如果你把 css,js和img放到同一个 hostname 下,并且请求顺序可能会成为 img->css->js 或 css->img->js 或 js->img->css 那么问题就来了,如果一个 img 尺寸是 500K ,那么不管 css 和 js 有多小,依然要等着img返回之后才能返回。

    所以,完整的正确的答案是。
    1,Cookie ,减少流量增强性能并且降低安全隐患。
    2,降低连接数限制造成的阻塞。
    3,增加了连接数,所以多了慢启动。
    4,小资源快速返回,使网页渲染更加迅速。
    denghongcai
        31
    denghongcai  
       2015-02-14 21:36:29 +08:00   1
    浏览器对DOM树的解析是按照顺序而来的,除非你把img写到最前面,这样才会有影响。这是基本的开发原则,有人把img放到head里来加载的?
    dant
        32
    dant  
       2015-02-14 21:52:22 +08:00   3
    @zhicheng keep-alive 的工作方式是
    请求1--(等待)->回应1-->请求2--(等待)->回应2 ... 请求n--(等待)->回应n
    ------------------------------------ 连接1 --------------------------------------------
    请求n+1-(等待)->回应n+1-->请求n+2--(等待)->回应n+2 ... 请求2n--(等待)->回应2n
    ------------------------------------ 连接2 --------------------------------------------------------------

    你所说的方式属于 pipelining, HTTP/1.1, SPDY 和 HTTP/2 有实现。但是 HTTP/1.1 pipelining 在大部分浏览器上都是默认禁用的,Chrome 甚至直接移除了这个功能。
    zhicheng
        33
    zhicheng  
       2015-02-14 22:08:34 +08:00
    @dant 你说的对,这是 pipelining 之后的 keep alive 。
    raincious
        34
    raincious  
       2015-02-14 22:20:22 +08:00   1
    @zhicheng

    所以感谢你解释了HTTP加载顺序的问题,回答挺完善。但,这一点答主根本就没有问啊 :D

    如果真的想了解的话可以参考: https://developers.google.com/web/fundamentals/performance/critical-rendering-path/?hl=zh-cn

    建议你再补充一点细节,比如Firefox等对img等外链标签的优化,是如何让它们在分析完HTML之后让Javascript和CSS(Render Blocking Points)一直优先加载的 :)
    zhicheng
        35
    zhicheng  
       2015-02-14 22:24:14 +08:00
    @raincious
    哈哈,我就猜肯定会有人说“楼主根本就没有问这个”。所以我说少了不是,说多了也不是。毕竟我前边已经说了,如果不明白,当我瞎掰好了。
    qiuai
        36
    qiuai  
    PRO
       2015-02-14 22:28:51 +08:00   3
    @zhicheng 其实对于问得出这种问题的人,就没必要说这么多.

    让他们自己看看YSlow的评分标准就是了...

    我本来想回答,不过想了想就没回...因为你也不知道他问这个的目的是什么...
    如果他是前端,他又不关注服务器的部分,如果他是后端,他又不关注前端和渲染的部分...
    所以我现在在V2EX不回这种问题了.回了还会被人质疑,弄的跟自己是笨蛋似的...
    最无奈的就是会有人挖坟来跟你对峙...我前天就遇到了一个...也是无奈.
    coolcfan
        37
    coolcfan  
       2015-02-15 00:06:47 +08:00
    变相增加代理自动切换规则编写难度=.=(开个玩笑)
    kiritoalex
        38
    kiritoalex  
       2015-02-15 00:53:35 +08:00 via iPhone
    twitter→t.co
    感觉很多案例都是如此
    sophymax
        39
    sophymax  
       2015-02-15 01:22:25 +08:00 via iPad   1
    技术上的原因livid说的很靠谱,在国内还有一些其他顾虑,比如去年acfun的A岛出现不和谐内容,被有关部门发现,随后域名商完全停止了解析,视频站和A岛用的同一个主域名,所以A站就因为一个辅助功能而被封域名了,acfun.com域名到现在还不能用,可以认为com域名是永久封杀了。对国外的,域名被盗的话,这个情况也很麻烦,鸡蛋都在一个篮子里了
    myliyifei
        40
    myliyifei  
       2015-02-15 02:57:47 +08:00
    @anouser chrome的DNS异步解析,默认没有开吧
    myliyifei
        41
    myliyifei  
       2015-02-15 02:58:40 +08:00   1
    @sophymax A站的CEO现在被关在北京。。。失联中
    111111111111
        42
    111111111111  
       2015-02-15 08:23:53 +08:00 via Android
    感谢本楼各位回复的大神,大开眼界
    fstab
        43
    fstab  
       2015-02-15 09:10:04 +08:00
    @myliyifei A岛也关闭了,再也不能愉快的丧尸了。。。( ̄m ̄*)
    skyline75489
        44
    skyline75489  
       2015-02-15 12:42:53 +08:00
    @dant 为什么现在的浏览器会默认关闭 pipeline 呢?开启的话对加载速度应该有一点提示吧
    tolerious
        45
    tolerious  
       2015-02-15 14:27:40 +08:00
    脑洞大开
    soulgeek
        46
    soulgeek  
       2015-02-15 19:00:39 +08:00
    之前看到各种图片cdn却没有深究,受教了!
    vileer
        47
    vileer  
       2015-02-16 11:06:30 +08:00
    @raincious app只用一个域名我觉得问题应该不大,因为写app的时候很少会用cookies传递信息,做认证类的一般都是带token,其他的按需加参数就好了
    Biwood
        48
    Biwood  
       2015-02-16 12:49:42 +08:00 via Android
    涨姿势了,之前做过这种项目,但是没有深究
    emonber
        49
    emonber  
       2015-03-04 15:31:42 +08:00   1
    @skyline75489 HTTP pipelining 要求:服务端需要将响应按顺序返回,在上一响应完全应答之前,不能发送下一响应。比如客户端按顺序请求了 /html 和 /css,服务端需要按顺序返回 /html 和 /css 响应。

    考虑这样的场景,服务端并行处理客户端的请求,/css 响应先于 /html 生成,但 /css 响应需要等待 /html 响应生成后才能发送,这就产生了阻塞延迟线头阻塞(head-of-line blocking)。

    除此之外,HTTP 服务器对响应的缓存还会造成性能损失,而对客户端请求数量的未加限制还容易引发对服务器的攻击。

    出于上述原因,部分 HTTP 服务器、代理并未实现 HTTP pipelining,或实现不正确(比如,并行化处理而不考虑应答顺序)。浏览器厂商由于担心线头阻塞的影响或是 pipelining 被代理破坏(所有请求都得重新发送),也大多采取保守的选择(默认关闭 HTTP pipelining 选项)。

    更多信息可以参考这里:
    http://chimera.labs.oreilly.com/books/1230000000545/ch11.html#HTTP_PIPELINING
    http://stackoverflow.com/questions/14810890/what-are-the-disadvantages-of-using-http-pipelining
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5192 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 09:28 PVG 17:28 LAX 02:28 JFK 05:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86