我不记得在哪里了,但前段时间我读到了一些关于使用子域名来提供网站资源以潜在地加快加载速度的内容。理论上,浏览器用于与服务器通信的协议只允许从单个域并发下载有限数量的内容(例如 2 或 4 个?)。但是,一个网站通常有数十种资源。因此,如果您要创建一个子域名(例如 images.css-tricks.com)并使用它来提供图片,则它将被视为不同的域名,并且您将能够将并发下载的数量增加一倍。
在尝试研究它时,我无法找到很多高质量的信息。一些论坛帖子谴责它,称需要进行多次 DNS 查找,这会比加速更慢。其他人甚至说 Google 可能会因此而处罚(这似乎是荒谬的)。
我一直试图在可能的情况下提高我网站的效率和速度。上个周末,我试图改进我在此网站上使用 CSS Sprites 的方式。这是 结果。创建子域名非常简单,所以我把它放在那里。这只是一张图片,所以它不太可能产生任何重大影响,但如果确凿的证据表明这是一个好主意,我一定会考虑将主题中的所有图片移动到子域名上。
有人对此有任何好的信息吗?
Google 可能会因将您的内容分散到多个子域名而对您进行处罚,但是从子域名提供您的图片、css、javascript 和其他文件则是另一回事,并且不应让您对 Google 产生任何担忧。
我认为 Google 不会因为将内容分散到多个子域名而对您进行处罚。.. 将发生的是您的 PageRank 将分散到不同的子域名中。查看此演示文稿,它揭穿了一些其他谬误 Google 谬误与误解。
您应该避免使用太多不同的子域名,因为它会增加 DNS 查找次数(http://developer.yahoo.com/performance/rules.html#dns_lookups),但它绝对是一种健康且常见的方法。
Steve Souders 还创建了 Cuzillion 来帮助测试不同的方法。
此外,Google 本身不仅使用子域名,还使用其他域名来获取图片,YouTube 图片位于 ytimg.com 域名的多个子域名中。
而且它不是唯一的,雅虎也这样做,维基百科也有其子域名 uploads.wikipedia.com 等。
我还没有测试过,但它实际上是 Firefox 的一个或两个附加组件推荐的(它们在测试您的结果时应该派上用场)
Google 的页面速度:http://code.google.com/speed/page-speed/
Yahoo 的 Yslow:https://addons.mozilla.org/de/firefox/addon/5369
http://yuiblog.com/blog/2007/04/11/performance-research-part-4/
这是一篇很棒的文章,但它没有说明子域名是否“足够”来欺骗浏览器允许 4 个流而不是 2 个。
我认为图表也略有误导。我们都知道,并行下载大量内容会降低每个内容的速度。例如,如果你们家每个人都在同一连接上同时下载一部 2GB 的电影,那么每个人的下载速度都会变得非常缓慢。
我可以想象同样的理论也适用于同时下载 8 个资源,即使规模较小。
你的类比不正确……更好的类比是将一个 2GB 的文件复制到 USB 驱动器上,以及将 2000 个 1MB 的文件复制到同一个驱动器上……后者会 *明显* 更慢
每个主机名 2 或 4 个请求(取决于您的浏览器)的问题不在于您下载资源的速度,而是连接建立和拆除需要一定的时间,无论实际资源的大小如何。
如果您的网站需要 100 张图片,每张 1KB……并且您将它们组合成一个 100KB 的精灵图……您仍然会看到加载时间的 *明显* 改善,即使您仍然传输 100KB,您也只浪费了一个连接设置(TCP/IP 握手等)来实现它。
此外,将资源(css/js/图片)拆分到子域名上可以有效地工作到一定程度,当您达到每个 IP 的连接数时(如果您的子域名只是同一 IP 的不同名称)。
如果您需要更多详细信息,请随时给我发送电子邮件 :)
限制是 2。我会四处看看,我有一本书(在某个地方)包含大量关于这类事情的信息。
http://www.mozilla.org/projects/netlib/http/pipelining-faq.html
限制由使用的特定 HTTP 规范和浏览器定义。
例如,Safari 遵循 HTTP 1.1 规范,最大值为 4 个并发请求。
您实际上只会在非常糟糕的浏览器上找到 2 的限制,而这些浏览器您 *真的* 不应该使用。
我指的是你,**IE***
嗨,
是的,它对我有用。我至少已经这样做了一年了。
我把图片放在 img.website.com 上
以及像 CSS 和 Javascript 这样的脚本放在 scripts.website.com 上
我确实在 Google 的 Firebug 附加组件“页面速度”中看到了加载时间上的显著差异。
例如,对于您的视频文件来说,这是一个特别好的主意,因为假设您将视频放在 video.css-trics.com 上,并且需要更改托管文件的服务器以使其更具成本效益,这比移动整个网站要容易得多。
Firebug 由 Joe Hewitt 创建(http://joehewitt.com/)
但是页面速度是由 Google 创建的 :P
(http://code.google.com/intl/de-DE/speed/page-speed/)
这对 Joe 来说很好,但他仍然没有为 Firebug 开发页面速度附加组件。
我一直想在我的网站上使用它。但我认为明智的做法是使用通配符 DNS。
当然,前提是您可以更改您的 DNS 设置和 Apache 配置。您可以使
http://img.css-tricks.com/img/logo.png
成为您的 www 子域名的别名。
无需跨文件夹放置文件,然后您可以在需要时逐步增强和使用子域名。
希望这对某些人有帮助
http://ma.tt/2003/10/wildcard-dns-and-sub-domains/
所以
我最近没有查看过您的网站,所以我不知道您是否正在使用 CDN,但如果不是,那么您可能需要考虑一下。
这是我为 net.tutsplus.com 编写的关于将 Amazon 的 CloudFront CDN 与 S3 结合使用的快速教程:http://net.tutsplus.com/articles/general/supercharge-website-performance-with-aws-s3-and-cloudfront/
根据我所做的研究,您不会受到处罚,但您也不希望使用超过两个子域名。我通常从“cdn.websitedomain.com”(来自 CloudFront 以实现低延迟)提供博客主题资产,并将帖子图片等内容从“files.websitedomain.com”中提取(这些内容不使用 CDN)。
无论如何,我希望这有帮助。如果您有任何疑问,请随时告诉我。我花了很多时间玩这些东西。:-)
我曾经遇到过一篇关于此主题的文章,在我的历史记录中查找过,也许这就是您要找的那一篇?
http://developer.yahoo.com/performance/rules.html#js_bottom
我认为 Google 因为将您的图片分离到子域名上而对您进行处罚是不合理的。您可以使用您的
robots.txt
文件禁止搜索机器人访问子域名,就像您对 /images/ 文件夹所做的那样。我认为无论如何这都是一个好习惯,但我不是 SEO 专家。我也经常思考这个问题 - 显然还不够重视,所以一直没尝试过。
不幸的是,YUI 的开发者们谈论了很多关于域名的事情,但没有提到 Martin 建议的子域名。
我将收藏此页面,稍后再查看。感谢你为我们这些非 CDN 用户提出这个问题。
Steve Souders 是这方面的专家,并且为此创建了 browserscope。你可以查看每个主机名的连接数和最大连接数列表。
主机名等同于子域名。但是,如果你在你的域名上存储了大量的 cookie,你可能需要考虑使用一个独立的无 cookie 域名来存储静态内容。这样可以减少加载页面所需的带宽,因为每次请求带有 cookie 的域名的对象时,都需要在请求中发送 cookie。
我同意 Steve Souders 是这方面的权威。并且不同浏览器的连接数也不同。
使用这种方法的一个主要优势还在于,你可以在特定的机器上运行不同的 Web 服务器设置,将其设置为大量缓存文件并优化为提供静态文件,而不是数据库请求等。
如果你曾经见过一个域名或子域名中包含“cdn”,那么它代表内容分发网络 (Content Delivery Network),基本上就是这个意思。
很多大型网站都这样做。你经常会看到 JS、CSS 和主题图片来自类似 media.example.org 的地址。他们通常将主题媒体卸载到一个单独的服务器上,通常是 CDN。
简单地更改为子域名应该会强制浏览器一次从你的服务器下载超过 2 个文件,但是使用 CDN 托管你的主题的 CSS、JS 和图片将获得更多好处。CDN 不仅将文件放到另一个服务器上,释放你的服务器以处理其他事情,而且它还在全球范围内的高性能机器上同步它们,这使得你的读者访问速度更快。
我使用的主机提供商提供了一个相当实惠的 CDN,Joost de Valk 一直在他的博客上使用它。 https://vps.net/cdn-signup
如果子域名映射到 CDN,那么毫无疑问,这将带来巨大的好处。
不过我很好奇,如果子域名不使用任何花哨的东西,只是托管在同一台服务器上,这样做是否仍然有帮助?
是的,仍然有帮助。但请记住,现在你的服务器必须处理 2 倍、3 倍或 4 倍的并发请求。因此,而不是一次处理 2 个资源,使用 3 个子域名,你可能需要一次处理 8 个资源。据我了解,在流量高峰期,这可能会导致你的服务器出现瓶颈。
然而,这仍然是一个非常好的主意!Rails 具有一个内置机制,可以将请求分散到多个子域名上。
我认为你应该找到一种方法来关闭子域名的 cookie(不确定是否可行),以便在每次连接时浏览器不会发送 cookie 来获取图片。
是的,在我的公司日常工作中,我费了不少劲来确保所有 cookie 都只在 www 上提供,这样我就可以为静态内容创建一个无 cookie 的子域名。使用此参数确保你的 Google Analytics cookie 只在 www 上设置。
pageTracker._setDomainName(“www.yoursite.com”)
速度提升本身微不足道,但与所有其他技巧结合起来,都会有所帮助。
由于大多数访问流量都来自首页,所以我做的最佳优化是在首页内联尽可能多的资源,然后使用一些 jQuery 懒加载($.get())将“真正的”外部资源放入浏览器缓存中,以便在后续页面浏览时使用。
你应该阅读这些书籍
高性能网站
以及
更快的网站
在后一本中,你将了解到从不同服务器提供对象与页面中存在的 JavaScript 之间的交互…是的,你必须将 JavaScript 考虑在内….
绝对将子域名指向一个 s3 或 cloudfront 存储桶。你无法击败亚马逊的速度和位置数量。
但是它可以提供 gzip 压缩的资源了吗?我上次尝试这个时,要想让它提供 gzip 压缩的文件非常麻烦。
抱歉,谈论的是 JavaScript 和 CSS 的 gzip 压缩…显然不会在图片上尝试这样做。 :)
其他要点
DNS 查询通常由浏览器缓存,直到它重新启动。
可能不值得对 JavaScript 文件这样做,因为(除非它们是延迟脚本),否则浏览器在获取并执行 JavaScript 源代码之前不会执行任何其他操作。
《高性能网站》一书有一个配套网站,提供了你所需的大部分内容。 http://stevesouders.com/hpws/rules.php
我可以从经验中肯定地说,为你的资源服务器使用第二个主机名肯定会加快加载时间。你可以使用子域名或完全不同的域名。
@Lee:将你的 JavaScript 放到 HTML 页面的底部(而不是 head 标签之间)将大大减少 JavaScript 执行对加载时间的影响。(《高性能网站》规则 #6)。
我至少一年来一直在每个创建的网站上这样做。
Firebug 和 YSlow 会向你展示真相 :)
此外,请记住浏览器不会向子域名发送任何 cookie(对于使用 cookie 的 Web 应用程序非常重要)。
这完全取决于服务器设置,有时子域名也会有 cookie。
我一直这样做,为自定义地图(类似于 Google 地图的 OpenLayers)提供地图瓦片。它基本上将 IE 的速度提高了一倍,并在 FF 上有所改进。我一直在计划将其添加到我的 CMS 中,以供所有客户网站使用,因为我预计它会带来显著的性能提升。
就地图瓦片而言,它被推荐使用,并且绝对可以提高速度(我使用 2 台服务器 - 每台服务器都有 2 个子域名),超过 2 个来自一台服务器的子域名似乎会降低速度优势。
IE8 执行六个并行请求。
http://www.stevesouders.com/blog/2008/03/10/ie8-speeds-things-up/
我认为 Firefox 默认是四个 - 至少根据 about:config 中的 network.http.pipelining.maxrequests 来说是这样的。
即使 W3C 建议值为 2,Firefox 默认值也是六个。它使用 network.http.max-persistent-connections-per-server。
你可以在雅虎的网站上非常轻松地看到这带来的区别。他们使用两个域名来存放他们的图片:d.yimg.com 和 l.yimg.com。
如果你打开 Firebug 的网络选项卡并加载 yahoo.com,只过滤图片,你就会看到它会等待来自同一域名的多达 6 个文件的的数据。因此,由于雅虎使用了 2 个域名,所以雅虎最多可以同时提供 12 个图片。
你也可以在 Firefox 的 about:config 中更改值,然后再次加载 yahoo.com 并查看区别。
感谢提供这个现实世界的例子!
我思考这个问题已经有一段时间了,但得出的结论是,除非我有几个需要特定图片/脚本/样式的网站(比如徽标),并且这些网站本身的流量也相当可观,否则可能不值得这样做。这就是 Google Ajax Libraries API 和雅虎的 YUI 对我来说很重要的原因。脚本/样式位于其他地方,用户更有可能拥有缓存版本,这意味着更快的响应时间,并有助于解决任何脚本下载问题。
对于自托管内容,我通常只执行我们都知道的标准最佳实践:最小化脚本和样式,创建雪碧图,使用干净的 HTML 代码等。
我认为通常优化网站图片就足够了,因为大多数情况下页面已经在访问者电脑上本地缓存了,所以只有新访客需要下载页面,但他们只需要下载一次,并且“希望”他们是回头客….
大约六个月前我开始使用CDN。我已经设置了css.domain、img.domain和js.domain。效果惊人,页面加载速度不仅更快,缓存也更好!另外,别忘了压缩(并使用gzip压缩)你的css/js文件。结合精灵图和在页面底部智能加载的JavaScript,你就可以获得一个防弹级超高速的网站/软件。
你是怎么做到的?看起来非常复杂。我知道在我的虚拟主机控制面板上很容易开启。
非常有趣的观点。我从未想过这一点,但它确实似乎有道理。
当你弄清楚后,可以对此进行后续报道吗?
我认为一篇关于加速网站的不同方法的文章会非常有用,我一直想知道压缩和gzip的功能……
我唯一能想到可能导致这种理论的原因是大多数Web服务器软件强加的最大请求限制。对于Apache,你可以在此处阅读一些相关内容:https://httpd.apache.ac.cn/docs/2.0/mod/core.html#maxkeepaliverequests
它基本上告诉服务器在任何给定时间不允许处理超过100个并发请求。如果你有很多用户,这会很快降低速度。
子域修复此问题的唯一方法是,如果它完全指向不同的服务器。如果你想了解更多信息,请给我发电子邮件……我目前要出门了。
这不是限制,而是一项功能。
你可以调整服务器端请求的数量,使其在考虑其资源的情况下合理地处理。
如果有人使用Drupal,有人创建了一个处理此问题的模块
http://drupal.org/project/parallel
DNS查找无关紧要。它们被你的操作系统和上游缓存。例如,如果我进行DNS查找,它将被我的笔记本电脑、我的路由器和我的ISP缓存。如果我切换到我的台式机,我的路由器仍然缓存了它。如果另一个州的人尝试,我的ISP仍然缓存了它。
你会看到卸载内容的主要用途之一是使用诸如static.example.com之类的域名。它不仅仅是同一Web服务器上的另一个子域,而是将静态内容(例如,图像、CSS、JavaScript,以及服务器端未预处理的任何内容)卸载到专门配置用于吞吐量的Web服务器上。在大规模部署中,将此工作负载从其他服务器(这些服务器正在努力处理动态内容)中移除,可以带来巨大的收益。
我听说过这个理论,但找不到足够的调查结果来判断它是否值得,但似乎对此有很多不同的看法。
事实上,Google在Google地图中使用了这种策略。Google的做法是使用四个不同的子域(mt0.google.com、mt1.google.com、mt2.google.com、mt3.google.com)在它们之间共享瓦片获取。
另一个现实世界的例子。谢谢!
我不知道它是否更好,但许多“大”公司已经这样做了
• Twitter 使用 twimg.com
• Youtube/Google 使用 ytimg.com
• Facebook 使用其CDN fbcdn.net
• Yahoo! 使用 yimg.com
顺便说一下,我碰巧看到了这个http://forums.whirlpool.net.au/forum-replies-archive.cfm/957366.html(最后一条帖子)
但这些是独立的域名,而不是子域名。
这不仅仅是为了增加并发连接的数量(尽管这当然可以帮助提高负载较轻的网站的总下载/渲染时间)——将静态内容移动到另一个域名还可以让你为该域名运行更简单的Web服务器配置,从而获得额外的速度提升。
静态资源可以在没有PHP/ASP/Rails/[你的动态内容引擎]的情况下提供服务,并且不需要客户端设置或返回cookie。此外,你可以积极地设置与缓存相关的标头,以确保每个客户端只会获取一次特定的媒体资源。
为了获得真正的性能和可扩展性优势,请尝试使用更轻量级的Web服务器(如nginx或lighttpd)来托管你的媒体资源。两者消耗的资源都少于Apache,这将使你能够更快地提供更多页面,而无需为你的托管提供商支付更多硬件或系统配额。
这不仅仅是理论——而是事实。HTTP 1.1规范要求浏览器每次最多从一个主机名下载2个组件。Firefox、Safari、Chrome和IE8忽略了这一点,并并行下载4到6个组件。但IE6和IE7每次只会下载2个。因此,域名分片的想法旨在专门提高IE6和IE7的性能。不建议将并行下载的数量增加到4以上,实际上这会降低性能。
你可以通过从子域托管静态资源或简单地设置指向你的/images/或任何目录的CNAME来实现这一点。
如果你想证明它有效,你可以使用像Fiddler这样的数据包嗅探器查看请求的瀑布图。
正如其他一些人提到的,Steve Souders是Web性能方面的专家,他的两本书都非常棒。
我最近写了一篇关于使用子域的文章,我认为我将其提交给了Script and Style,所以你可能看到的是这篇?无论如何,这是链接。
http://papermashup.com/using-subdomains-to-speed-up-your-site/
Ashley
在一个相关方面,需要注意的是,为资源拥有一个单独的子域对于那些其网站本身也具有其他子域并在其间共享资源的人(很常见:设计元素、样式表、jQuery等)具有特殊的好处。
因此,你的内容位于“sweet.whatever.com”和“sour.whatever.com”,而所有图像都位于“images.whatever.com”。由于当我去“sweet”子域时,图像会被缓存,因此当我转到“sour”时,它不需要再次下载。你实际上是自己的CDN。
我没有资源链接,但我知道Sitepoint将其图像托管在不同的子域上。
第三个现实世界的例子。我想我已经满意了。感谢所有坚持主题的人!
小心这一点。域名分片实际上可能会降低新浏览器的性能。浏览器尝试一次加载太多资源,导致其变得缓慢。
这是一个平衡行为,但在大多数情况下,多个子域会减少页面加载时间。DNS查找确实会产生成本,但最多可以忽略不计。更多并行下载带来的潜在性能提升几乎可以肯定地弥补了任何损失。
其工作原理如下:浏览器每次只会从单个域中提取两个资源。特别是如果你有几个大型图像,你最终会阻塞单个域的管道。从一个或多个子域调用资源会欺骗浏览器进行更多并发下载,从而减少出现瓶颈的可能性。Google实际上将其用于地图。每个主要的4个地图瓦片都从其自己的唯一子域中提取,从而允许它们全部并发下载,而不是一次只下载两个。
Jeff Atwood在Stack Overflow博客上有一篇关于他们如何通过使用静态无Cookie域名来提高性能的好文章http://blog.stackoverflow.com/2009/08/a-few-speed-improvements/
嗯。Cookie是一个很好的观点。我认为这有助于回答另一个问题:是否使用www?如果你使用裸域名作为你的网站,例如domain.com,那么浏览器将尝试向任何subdomain.domain.com发送Cookie并导致流量。我认为我宁愿不使用JavaScript来禁用它,而只是从www提供内容,这样我就可以知道我在所有其他子域上都是无Cookie的。
从概念上讲,这也是正确的——域名本身只是一个名称,而不是服务器。例如,没有“com”服务器,因为这是一个顶级域名。不应该有“domain.com”服务器,因为这仅仅是域名的名称。所有服务器都应该有自己的名称,包括www,而且浏览器显然仍然遵守这一点。
我通常厌恶“最佳实践”这个词,但在这种情况下,它是有道理的。
哇。感谢大家提供的精彩信息。仅此评论线程本身就是一个杀手级的资源。
我认为普遍的共识是,是的,这是一个好主意。如果你可以将子域映射到完全不同的服务器(一个运行精简版Web服务器并具有特殊设置的服务器(积极缓存、无Cookie))或将其映射到真正的CDN,这显然更好。
但是,仅仅是子域本身似乎就具有足够的好处,值得这样做。
我比你晚了3周,但我认为你用这个总结击中了要害,Chris。
再次感谢你提出这个问题!
http://developer.yahoo.com/performance/rules.html
对于脚本文件,最好的解决方案是将它们合并到一个压缩文件中,并在页面底部加载。但还有一个技巧,你可以创建一个谷歌代码帐户,并将该文件上传到那里,然后在页面底部加载文件时使用该文件的谷歌代码URL,从而使用谷歌作为你的脚本的CDN网络。这样,你可以通过从最接近你的谷歌服务器加载文件来提高脚本文件的性能。
我还没有尝试过使用CSS文件和图像精灵,但它对脚本文件运行良好。
仅仅查看你的CSS/JS,有一些可以提高性能的东西
1. 尽可能地合并JS文件,压缩并gzip它们。对你的CSS也这样做。
2. 确保CSS中的所有内容都小写
@Martin:使用谷歌代码作为CDN,我喜欢。我将尝试用CSS和图像来实现。
我不明白为什么谷歌会因为你只是使用子域来存储图像而惩罚你。这不像你真的在多个域中传播内容。
我想提到的另一点是图像优化。我经常使用像RIOT这样的程序,它可以真正减少图像文件的大小。大幅减少,几乎没有明显的质量下降。适用于JPEG、GIF和PNG文件类型,并从图像中删除大量不必要的代码。(曾经在文本编辑器中打开过图像吗?)
我一直在这样做,并为我的所有图像、CSS和JavaScript创建了一个子域(cdn.myunv.com)。它不是一个真正的CDN,但我喜欢它的外观/听起来。
如果你疯狂地创建例如3个子域来存储文件,那么你的网站实际上会因为许多DNS查找而变慢,所以保持1或2个子域。通常人们使用一个,但两个也可以有所帮助(一个用于图像,另一个用于CSS/JS)。
以下是谷歌和雅虎关于此技术的链接
http://code.google.com/speed/page-speed/docs/rtt.html#ParallelizeDownloads
http://developer.yahoo.com/performance/rules.html#cdn
这是一篇非常好的文章,值得深入研究,最好有一些关于SEO问题的可靠证据。如果一个域只用于存储图像,你的页面排名会受到使用两个域的影响吗?我不确定……这也不算重复内容吧?
加快网站速度固然很好,但我主要担心的是SEO。我肯定要对此进行大量阅读!我还会把它传给我的SEO同事,看看他们是否知道什么。
感谢这篇文章!
对于我们这些拥有自己的服务器并控制Apache(或brickweb,无论你使用什么)的人来说,我认为这不是什么大问题——我们可以扩展线程以允许更多多个连接到我们的技术。我认为问题更多的是针对那些在共享主机环境中的人,他们在每个域上设置了限制。
对于Anna Wolf的网站来说,效果似乎很好,图像加载速度很快。
我认为它最多使用了6个子域来加载图像!
我认为上面已经稍微考虑过这个问题了,但我的一个同事有一天突然顿悟了。他说:“我终于知道为什么网站会在外部域上托管图像和媒体了。”他说,对于浏览器发送的每个请求,它都会为该域的每个项目发送所有cookie信息。因此,如果你使用另一个域,每个请求都会伴随较少的数据,从而使其效率更高。如果这是错误的,请原谅,但他非常聪明且有说服力。
@Benn:这是真的,考虑到Cookie规范规定浏览器必须至少支持每个主机名20个Cookie,每个Cookie至少4K,那么每个请求的潜在容量为80K。
最重要的是,一个未缓存的平均页面我想至少有10个请求?如果只有需要发送Cookie的请求才发送Cookie,那么在某些情况下这将是一个巨大的节省。
你不应该在不受保护的域上托管需要授权才能查看的图像。如果你正在提供这样的服务。
如果子域在另一台服务器上,这可能有效。
Bogdan Pop的建议不好。如果该服务器宕机,则网站将无法加载图像。给人留下糟糕的印象。子域将在同一台服务器上,因此两者要么同时在线,要么同时离线。从而给人一种整体上更流畅/一致的印象。你不想看到损坏的网站,对吧?
尽可能地使用精灵图(要明智),优化所有图像,然后将一些(但不是全部)图像转储到子域上。如果你试图允许更多并发下载,那么把所有东西都分散开来就没有意义了。各占一半。
好吧,这是一个值得一问的问题!
多问一些这样的问题,我们都能从彼此的评论中学到很多东西。
感谢这篇文章。
这里有人做到了
http://blog.stackoverflow.com/2009/08/a-few-speed-improvements/
问题更多的是关于Cookie和缓存,而不是多个下载。
也许他在codinghorror上也写过这方面的内容,但我现在找不到那篇文章了。
向最好的学习:Steve Souders,购买他的两本书,你就会知道在性能成为问题时该怎么做。
http://stevesouders.com/
而且,如果你为静态资源(图像、CSS、JS)使用了2到3个子域,它会提高前端速度,但太多的子域会增加DNS查找次数,这不好。
还可以看看真正的CDN,而不仅仅是子域的想法。看看亚马逊云和其他许多服务。
是的,我以前听说过这个,BBC在他们的网站上使用它,我认为它最适合像新闻网站这样有很多图像的网站,但是如果你在一个只有100张图像的网站上,我怀疑它是否会有很大区别。
老实说,我从未尝试过,但我认为它在专用服务器上最有用,但这只是我的看法……
来自http://performance.survol.fr/(Éric Daspet,法语博客,但链接为英文。他曾在雅虎与Nicole Sullivan和Stoyan Stefanov共事,他们负责Smushit!)的一些链接
http://radar.oreilly.com/2009/07/velocity-making-your-site-fast.html
http://en.oreilly.com/velocity2009/public/schedule/proceedings
来自2006年,保存得很好:http://carsonified.com/blog/features/webapps/serving-javascript-fast/
我记得一些事情:静态和动态内容应该分开,然后以完全不同的方式进行优化(图像不使用Apache服务器,不使用Cookie,如果你需要CDN,亚马逊S3是一个廉价的选择……)。而且用户真的非常讨厌等待页面加载,大型网站已经对此进行了衡量。
使用skydrive(来自hotmail)怎么样?
使用hotmail,你可以获得大约5GB的免费skydrive帐户。我最近想到,skydrive可以作为一种个人CDN,因为它们一定在不同的位置有多台服务器,从中提供你的内容。在skydrive上托管你的图像和资产,然后在代码中引用它们,可以为你的访问者带来速度提升……
有人认为这是一个好主意吗?
此外,你可以使子域重定向到主域。例如,你可以使images.css-tricks.com重定向到css-tricks.com。可以使用htaccess、HTML、JavaScript或PHP(如果子域支持它)来实现。
我忘了:使用Meta刷新标签的HTML
我可以说使用子域不起作用。两个同时加载的限制指的是服务器(作为硬件)而不是域。因为域和子域的内容位于同一台服务器上,所以浏览器将两者视为一个来源,而不是两个。
这种限制是有道理的:加载十个文件两次比加载一个文件十次要快。记住:当加载页面时,两台机器同时工作(实际上甚至不止两台)。将工作分成小块可以让浏览器在服务器工作时做一些事情。
你可以在咖啡店看到这种现象,一个店员只负责接单和收钱,另一个店员负责煮咖啡。如果十个人同时进入商店,所有十个人都必须等待更长的时间,就像一个客户要服务一个客户从 A 到 Z 一样。
所谓的咖啡店缓冲区溢出现象 :)
Helen:浏览器根据主机名限制连接,而不是域名。浏览器不知道两个子域名指向的是同一台物理设备。
这是一篇优秀的文章,其中包含图表展示了性能差异。
http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/
在我的例子中,静态主机解析到具有最小配置的不同机器。没有理由加载 mod_perl 和 mod_apache 来分发静态文件。这可能也可以作为虚拟主机来完成。
对于像 css-tricks.png 这样的文件,你可以通过稍微修改文件来获得更快的加载速度。关闭隔行扫描可以将文件大小从 105K 减少到 83K。更改为索引调色板(256 色,从大约 4000 色减少)将文件大小减少到 27K..
这将比添加子域名减少更多加载时间。而且,它也稍微减少了服务器负载。
此外,CSSTidy 和 Google 的 Closure Compiler 将比子域名产生更大的影响。
我真的很讨厌我迟到了3年才参加派对!
谢谢Devon!
浏览器可以同时从不同的域名(包括子域名)加载更多内容,这意味着加载速度更快…
我已经在我的博客 http://lirent.net 上对 js 和 css 文件使用了这个技巧,看起来比以前快了。
我没有将其应用于图像,因为要更改很多帖子。
亚马逊也这样做…