2011-03-01 70 views
8

速度更快? Hot linking (inline linking)更改为absolute URI或自己托管该资源并使用relative URI性能:绝对与相对URL

在他tutorial on how to style HTML5 elements in Internet Explorer,雷米夏普指出热链接导致一个“额外的HTTP [GET]请求”。我同意你是否比较热链接复制&将脚本粘贴(嵌入)到HTML中。但是,如果您将热链接与本地托管脚本以及通过相对路径进行链接进行比较,那么我认为热链接实际上会(更快),因为浏览器无需解析绝对路径来自相对路径的网址。但是,在这两种情况下,都会执行额外的HTTP GET请求,是否正确?

回答

11

正确的答案是 - 它取决于。

盗链可能会很慢,因为 -

  1. 需要一个额外的DNS查找
  2. 无法重用现有的TCP/IP套接字连接

托管你的服务器上可能会很慢,因为 -

  1. 浏览器只允许每个主机有n个并发请求。对同一个主机有更多的请求有可能引入排队,这可能会很慢。数字'n'是浏览器特定的,并且是2到6之间的任何值。See browserscope > network > connections per host name

如果您认为两方面的服务器在各方面都相同,我会说在您的服务器上托管会更快。特别是在每台主机的连接数为6的新浏览器上,情况尤其如此。

但可悲的是,事情从未如此简单。我建议仅当使用盗链 -

  1. 你在你的领域有太多的资源(图片/ JS)
  2. 其他服务器是CDN,而资源是足够的一个受欢迎的,所以,有一个它将会出现在浏览器的缓存中。在谷歌的服务器上思考JQuery。

对于所有其他用途的情况下,你最好的托管自己的服务器上。

+2

虽然“服务器”可能是'res1.domain','res2.domain',就是通过在多个内部域类型(或负载)分裂(这从竟被隐含负载均衡不同,它“看起来不一样“到浏览器)。一旦缓存DNS问题应该是不存在的。 – 2011-03-01 20:00:50

0

我猜想,影响这种情况的唯一的东西是服务器的问题(速度)的相对速度以及你是否希望此代码在任何其他网站(可维护性)运行。

0

假设资源没有嵌入HTML文档本身(即链接),并且资源位于具有相同主机名的同一台服务器上,通过绝对URI或相对URI检索资源的时间应该是虚拟的相同。其他HTTP请求将以任一方式提交。如果你想分割'几乎相同的',由于需要解析的HTML数量较少,所以我会倾向于相对路径的速度非常非常小,路径解析(如你所提到的)可能是更快(由于字符串标记器不必处理地址的域部分/地址更短)。这里的区别仅仅是出于好奇心。我无法想象一个网站正在被优化到这个级别(虽然它可能会建立一个很好的经验法则?相对路径允许您自由地更改站点的域名/路径而无需重写包含的所有的URI的..)

有一点要考虑是,如果资源是托管在同一台服务器上,并引用HTML文档的服务器启用了保持活动,另一个TCP连接将不得不初始化以连接到第二个服务器(以及为解析其他服务器的主机名而进行的DNS查询,假设该访问不是通过IP地址),从而导致与多个引用资源相比的额外开销相同的服务器(GET请求将在现有T内发出) CP连接)。

这同样适用于没有启用KeepAlive的服务器;将为每个请求的资源初始化一个TCP连接。

2

这与更低级别的东西,如tcp而不是http本身有关。如果你现在从同一个网络服务器得到两个项目,你的浏览器很可能通过同一个tcp连接来获取它们。这是通过一个tcp连接的两个http事务。这避免了另一个TCP连接的开销。这种开销在流量方面很小,但可能涉及很多延迟。

OTOH,做两个HTTP事务,他们每去到不同的服务器,也许更快,也许不是。诚然,你有两个tcp连接的开销。在这种情况下,他们序列化—一个必须完成之前,第二个可以开始。但是,如果您拉下了很多对象,那么第2,3,4 ...个连接都可以并行执行,从而屏蔽延迟问题。在这种情况下,事情可能会快得多,因为小对象可能不受ISP的带宽限制。

水域确实是泥泞的。

只要留意延迟和带宽。取决于您的资源数量和规模。

2

客户端需要解析相对URI的时间绝对可以忽略不计。

因此,使用绝对或相对URI链接到文档相同域中的资源没有任何区别。当资源被不同的服务器上承载

唯一的差别就越大。然后你需要,而一个额外的HTTP请求到服务器,你已经到可以用它连接的连接额外的TCP连接到该服务器。