通过浏览器获取并发请求的数量
我试图找出是否值得跨多个子域传播图像请求。 [本文](链接打破)例如说:
大多数浏览器一次只能发出两个请求,所以浏览器会请求两个文件,下载它们,然后继续下一个。 越多的HTTP请求或页面要求正确显示的独立组件,用户需要等待的时间越长。
当他们说的最多 ,特别是哪些浏览器? 这个数字是否与这个问题的并发XMLHttpRequests数量有关?
这里有很多事情要考虑。 在大多数情况下,我只会select一个无cookie的域/子域来托pipe您的图像,如static.mywebsite.com。 理想情况下,静态文件应由CDN托pipe,但这是另一回事。
首先,IE7每个主机只允许两个并发连接。 但是今天的大多数浏览器都不止于此。 IE8允许6个并发连接,Chrome允许6个,Firefox允许8个。
所以,如果你的网页只有6张图片,那么把你的图片分布在多个子域名上是毫无意义的。
那么假设您在一个页面上有24个图像。 那么,人生中没有什么东西是自由的,就像平行化的死亡一样。 如果您将图像存放在4个不同的子域中,则意味着每个图像在理论上可以并行下载。 但是,这也意味着有3个额外的DNS查找。 DNS查询可能是100毫秒,150毫秒或有时更长。 这个额外的延迟很容易抵消并行下载的好处。 您可以通过使用http://www.webpagetest.org/testing网站来查看真实世界的示例;
当然,最好的解决scheme是尽可能使用CSS精灵来减less请求的数量。 我在这篇文章和这篇 文章中讨论这个问题以及每个请求的固有开销。
UPDATE
史蒂夫·苏德斯(Steve Souders)有一篇关于分区领域的有趣文章。
美国十大网站中的大部分都是域名分割。 YouTube使用i1.ytimg.com,i2.ytimg.com,i3.ytimg.com和i4.ytimg.com。 Live Search使用ts1.images.live.com,ts2.images.live.com,ts3.images.live.com和ts4.images.live.com。 这两个网站都分成四个域。 最佳的数字是多less? 雅虎 发布了一项研究,build议在至less两个,但不超过四个域分割。 以上四个,性能实际上下降。
http://www.stevesouders.com/blog/2009/05/12/sharding-dominant-domains/
但请注意,这是在2009年写的。在2011年,他发表了评论…
由于较新的浏览器在每个域中打开更多连接,因此向下修改数字可能会更好。 我认为2是一个很好的妥协,但这只是一个预感。 如果一些生产财产进行了testing以确定最佳数量,这将是非常好的。
您还应该记住,雅虎和亚马逊这样的大型网站甚至有必要进行域名分解的重要原因是他们的网站如此dynamic。 图像被附加到dynamic显示的产品或故事。 所以对于他们来说,使用CSS sprites是不切实际的。
然而,像StackOverflow这样的网站在这些图像上很轻,而且他们已经减less了很多请求,所以他们不需要进行分片。 实现这一目标的一大步是使用这个sprites.png图像…
Sites/stackoverflow/img/sprites.png
更新#2史蒂夫Souders张贴另一个域更新的更新 。 他重复了我已经提到的大部分内容。 但突出的是SPDY,这是如何影响你的决定的。
也许反对域分片的最强有力的论据是,在SPDY(以及HTTP 2.0)中是没有必要的。 实际上,在SPDY下,域分片可能会损害性能。 SPDY支持并发请求(尽早发送所有请求头)以及请求优先级。 分散在多个领域削弱了这些好处。 Chrome,Firefox,Opera和IE 11都支持SPDY。如果您的stream量受到这些浏览器的支配,您可能需要跳过域分片。
谷歌浏览器有:6,Safari有:5,Mozilla Firefox有:8最大并发请求到同一域。