Browser 向服务器发出一个请求需要多少钱

Browser 向服务器发出一个请求需要多少钱,browser,httprequest,Browser,Httprequest,我想知道,把所有需要下载的css脚本和东西放在一个文件中,你能赢多少钱 我知道你会通过使用精灵赢得很多,但在某个时候,这样做可能会伤害你 例如,我的网站使用了很多小图标,大多数页面都有不同的图标,在将所有这些图标组合在一起后,我可能会得到超过500kb的总容量,但如果我每页制作一个精灵,它会减少到几乎50kb/页,所以这很酷 但是脚本如何呢?如果我为每一个刚刚超过100行的页面制作一个脚本,我会赢得多少?或者我根本不会赢 问题,基本上我想知道下载一个文件的单个请求需要多少钱,在当今的现代浏览器和

我想知道,把所有需要下载的css脚本和东西放在一个文件中,你能赢多少钱

我知道你会通过使用精灵赢得很多,但在某个时候,这样做可能会伤害你

例如,我的网站使用了很多小图标,大多数页面都有不同的图标,在将所有这些图标组合在一起后,我可能会得到超过500kb的总容量,但如果我每页制作一个精灵,它会减少到几乎50kb/页,所以这很酷

但是脚本如何呢?如果我为每一个刚刚超过100行的页面制作一个脚本,我会赢得多少?或者我根本不会赢

问题,基本上我想知道下载一个文件的单个请求需要多少钱,在当今的现代浏览器和高速连接中拥有许多脚本/图像文件是否真的很糟糕

编辑


感谢大家的回答,很难只选择一个答案,因为每个答案都回答了我的问题,我选择了奖励我认为回答了我关于请求成本问题最直接的答案,我不会接受任何正确的答案,因为每个人都是正确的。

多个请求意味着更多的延迟,因此,这通常会产生影响。具体的成本将取决于响应的大小、服务器的性能、它在世界上的托管位置、它是否被缓存等等。。。为了得到真实的测量结果,你应该用真实世界的例子进行实验

我经常使用PageSpeed,并且通常遵循记录在案的最佳实践:

试着直接回答你的最后一个问题:额外的请求会花费更多。有很多文件并不一定“非常糟糕”,但如果可以的话,通常最好将内容合并到一个文件中。

棘手的问题:)

当然,琐碎的答案是更多的请求需要更多的时间,但这并不一定如此简单

  • 浏览器打开到同一主机的多个http连接,因为不使用并行下载而是下载一个大文件被认为是性能瓶颈
  • web服务器应尽可能使用gzip内容编码。所以,HTML、JS、CSS等文本资源的大小是相当压缩的
  • 这些资产中的大多数是静态内容,因此标准web服务器应在其上使用etag缓存。这意味着下一次的下载量将达到26字节,因为服务器会告诉用户“未更改”,而不是再次发送32KB的JavaScript
  • 由于etag缓存,整个web站点应该是可缓存的(我假设您正在编写一个游戏或类似的东西,而不是一些老式的J2EE servlet页面)
  • 我建议制作2-4个大文件并下载,如果你真的想要大文件的话
总而言之:

  • 如果您只有静态内容,那么一切都是一样的,因为etag缓存将为从服务器下载的任何实际内容设置快捷方式,服务器将返回304 Not MODIFED答案
  • 如果您有一些生成的动态内容(比如servlet页面),请将JS和CSS分开,因为它们可以被etag单独缓存,并且只需要下载servlet页面
  • 检查您的服务器是否支持压缩的gzip内容编码,这会有很大帮助:)
  • 如果您有多个动态内容(例如多个动态变化的图像),将它们表示为2-4个单独的图像以利用并行http连接进行下载是有意义的(尽管我很难想象现实生活中会出现这种情况)
请确保您没有动态地提供静态内容。也就是说,尝试将图像加载到web浏览器,打开网络流量视图,用F5重新加载,并查看您从服务器获得的是304未修改的流量,而不是200正常和真实的流量。
最大的性能优化是,您不需要从服务器中提取任何内容,如果使用得当,它可以从盒子中取出:)

您的问题不能以真正的通用方式回答

结合脚本和样式表有几个原因

使用HTTP/1.1的浏览器将打开多个连接,每个主机通常有2-4个连接。因为几乎每个站点都有实际的HTML文件和至少一个其他资源,如样式表、脚本或图像,所以当您加载初始URL(如
index.HTML
)时,就会创建这些连接

  • TCP连接代价高昂。这就是浏览器提前直接打开多个连接的原因
  • 连接通常被限制为一个小数目,并且每个连接一次只能传输一个文件
也就是说,您可以将文件拆分到多个主机(例如,一个额外的
static.example.com
),这会增加主机/连接的数量,并加快下载速度。另一方面,由于更多的连接和额外的DNS查找,这会带来额外的开销

另一方面,有充分的理由将文件分开

最重要的是HTTP/2。HTTP/2只使用一个连接,并通过该连接多路传输所有文件下载。网上有多个演示可以演示这一点,例如

如果将文件分开,它们也可以单独缓存。如果您只更改了小部件,浏览器可以重新加载更改的文件,所有其他文件将使用
304 Not Modified
进行应答。当然,您应该有适当的缓存头


也就是说,如果您有足够的资源,您可以使用HTTP/2为支持它的客户端分别提供所有文件。如果您有很多较旧的客户端,那么当它们使用HTTP/1.1发出请求时,您可以回退到组合文件中。您的问题的答案是这取决于您的实际情况

佩奇的最终目标
request start + initial connection + SSL negotiation+ time to first byte + content download