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

2015-02-14 17:11:57 +08:00
 sincway
Google 等也喜欢这么干,类似 googlevideo.comgoogle-analytics.com 等域名用来分管某个服务。这样做的好处是什么?应该不只是偏好问题吧?

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

另外在自己开发 App 时只用一个域名有缺点吗?Thanks
17594 次点击
所在节点    Velocity
49 条回复
anouser
2015-02-14 18:16:15 +08:00
@zhicheng 详细说说对浏览器渲染有啥影响?没理解,至于css javascript放到html头还是尾和域名用啥是两回事吧。

浏览器有并发限制,动态内容用一个域名,静态内容用一个域名会加快资源的载入速度且不会阻塞。
当然,你还要考虑dns解析的时间,多一个域名,浏览器就要多解析一下。这在移动网络下是一个问题,尤其是你的网站是全球可访问的时候。chrome有dns预解析的技术,在桌面上这个问题不大。
另外cookie不用发过去,加快访问速度,并且可以防止子网站出现漏洞,整个站点的session被劫持的影响。
anjianshi
2015-02-14 18:30:21 +08:00
https://developer.yahoo.com/performance/rules.html
见 Use Cookie-free Domains for Components 小节,针对楼主的问题,说的已经很详细了
raincious
2015-02-14 18:33:21 +08:00
主要其实还是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
2015-02-14 18:34:35 +08:00
img.zhihu.comwww.zhihu.com 不是同一个域,应该没有浏览器并发限制吧?@zhicheng
Showfom
2015-02-14 19:33:35 +08:00
楼主还有一个事情 DNS 服务器其实不联系用同一个后缀的 参考 AWS ROUTE 53
lyragosa
2015-02-14 19:36:05 +08:00
还好我们100人小网站界从来不考虑这种事情xd
zhicheng
2015-02-14 20:33:45 +08:00
@raincious @kaneg @s51431980
知道一了,不知道有二?难道 yahoo 和 youtube 的 yimg.comytimg.com 用的是裸域?

@anouser
你需要非常仔细的补充一下 HTTP 方面的知识,如果之后还不明白,干脆当我在瞎掰吧。
Smartype
2015-02-14 21:01:45 +08:00
@zhicheng 沟通,交流。共同成长。其实我也好奇这和浏览器渲染有什么关系。希望明示,瞎掰也愿意听听/看看
denghongcai
2015-02-14 21:23:31 +08:00
@zhicheng 我也好奇,希望明示
zhicheng
2015-02-14 21:27:11 +08:00
@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
2015-02-14 21:36:29 +08:00
浏览器对DOM树的解析是按照顺序而来的,除非你把img写到最前面,这样才会有影响。这是基本的开发原则,有人把img放到head里来加载的?
dant
2015-02-14 21:52:22 +08:00
@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
2015-02-14 22:08:34 +08:00
@dant 你说的对,这是 pipelining 之后的 keep alive 。
raincious
2015-02-14 22:20:22 +08:00
@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
2015-02-14 22:24:14 +08:00
@raincious
哈哈,我就猜肯定会有人说“楼主根本就没有问这个”。所以我说少了不是,说多了也不是。毕竟我前边已经说了,如果不明白,当我瞎掰好了。
qiuai
2015-02-14 22:28:51 +08:00
@zhicheng 其实对于问得出这种问题的人,就没必要说这么多.

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

我本来想回答,不过想了想就没回...因为你也不知道他问这个的目的是什么...
如果他是前端,他又不关注服务器的部分,如果他是后端,他又不关注前端和渲染的部分...
所以我现在在V2EX不回这种问题了.回了还会被人质疑,弄的跟自己是笨蛋似的...
最无奈的就是会有人挖坟来跟你对峙...我前天就遇到了一个...也是无奈.
coolcfan
2015-02-15 00:06:47 +08:00
变相增加代理自动切换规则编写难度=.=(开个玩笑)
kiritoalex
2015-02-15 00:53:35 +08:00
twitter→t.co
感觉很多案例都是如此
sophymax
2015-02-15 01:22:25 +08:00
技术上的原因livid说的很靠谱,在国内还有一些其他顾虑,比如去年acfun的A岛出现不和谐内容,被有关部门发现,随后域名商完全停止了解析,视频站和A岛用的同一个主域名,所以A站就因为一个辅助功能而被封域名了,acfun.com域名到现在还不能用,可以认为com域名是永久封杀了。对国外的,域名被盗的话,这个情况也很麻烦,鸡蛋都在一个篮子里了
myliyifei
2015-02-15 02:57:47 +08:00
@anouser chrome的DNS异步解析,默认没有开吧

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

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

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

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

© 2021 V2EX