HTTP请求成本与页面大小成本?

时间:2011-05-13 03:42:50

标签: performance http httpwebrequest

我知道最好尽量减少每个页面所需的请求数量。例如,组合javascript文件和使用css sprites将大大减少呈现页面所需的请求数。

我看到的另一种方法是将javascript嵌入页面本身,特别是针对该页面特定的javascript,而不是真正在其他页面上共享。

但我的问题是:

我的javascript在什么时候变得过大,以至于将脚本拉入单独的文件并允许对单独的js文件的额外请求变得更有效?

换句话说,我如何衡量一个字节等于一个请求的成本?

由于连续请求被缓存,因此调用相同js文件的唯一成本是请求的成本。将js保留在页面中将始终产生额外页面大小的成本,但不会产生额外请求的成本。

当然,我知道有几个因素:客户端的速度,带宽速度,延迟。但是必须有一个转折点,一个人做另一个更有意义。

或者,带宽如此便宜(速度,而不是钱)这些天它需要比以往更多的字节来超过请求的成本?似乎是一种趋势,页面大小变得不那么重要,而请求的成本已经趋于稳定。

思想?

3 个答案:

答案 0 :(得分:10)

如果您只是查看数字并假设平均往返时间为100毫秒,平均连接速度为5 Mbps,您可以得到一个数字,表示最多可以添加62.5 KB在将其分解为单独的文件之前的页面变得值得。假设您的服务器上启用了gzip压缩,那么您可以添加的实际JavaScript数量甚至更大。

但是,这个数字忽略了许多重要的考虑因素。例如,如果您将JavaScript移动到单独的文件中,则用户的浏览器可以更有效地缓存它,以便触摸您的页面100次的用户可能只下载一次JavaScript文件。如果您不这样做,并假设您的网页有任何动态内容,那么同一个用户每次都必须下载整个脚本。

要考虑的另一个问题是页面的可维护性。作为一般规则,您添加的JavaScript越多,维护页面并进行更改和更新就越困难,而不会引入错误和其他问题。因此,即使你没有相当于62.5 KB的JavaScript,即使你不关心缓存方面的事情,你也要问问自己是否有一个单独的JavaScript文件可以提高可维护性,如果是的话,是否是值得牺牲可维护性以加快页面加载速度。

所以这里确实没有确切的答案,但作为一般规则,我认为如果JavaScript是页面真正固有的东西(onclick处理程序,效果/动画,其他直接与元素接口的东西)页面)然后它属于页面。但是如果你有一堆其他代码,你的处理程序,效果和其他东西更像是一个库/辅助工具,那么该代码可以移动到一个单独的文件中。支持代码在页面大小和加载时间方面的可维护性。无论如何,这是我的建议。

答案 1 :(得分:5)

设置了正确的标头(远期标题见:1),将js拉入单独的文件几乎总是最好的选择,因为对页面的所有后续请求都不会对js文件进行任何请求或连接。

此规则唯一的唯一例外是静态网站,可以安全地在实际的html页面上使用远期标头,以便可以无限期地缓存它。

对于什么字节大小等于http连接的成本,由于您提到的变量以及许多其他变量,这很难确定。 HTTP资源请求可以在一直到用户的节点上缓存,它们可以在很多情况下并行,并且单个连接可以重复用于多个请求(参见:2)。

页面大小在网络上仍然非常重要。移动浏览器变得越来越流行,并且通过移动提供商的连接也变得越来越流行。尝试并保持较小的文件大小。

  1. http://developer.yahoo.com/performance/rules.html
  2. http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Persistent_connections
  3. 补充:值得注意的是,通过缩小和gzip可以实现主要页面大小的成就,这些成就分别通过良好的构建工具和Web服务器非常简单。

答案 2 :(得分:5)

这是一个很大的话题 - 你间接询问网络性能的许多不同方面,所以有一些技巧,其中一些是wevals提到的。

根据我自己的经验,我认为它部分地归结为模块化和权衡。例如,将整个网站中常见的javascript打包在一起是有意义的。如果您从CDN提供资产并设置正确的HTTP标头(Cache-Control,Etag,Expires),您可以获得巨大的性能提升。

确实,您将承担浏览器发出请求并从服务器接收304 Not Modified的成本,但该响应至少会快速通过网络。但是,您(通常)仍将承担处理您的请求并决定资产未更改的服务器的成本。这就是Squid,Varnish和CDN等网络代理一般闪耀的地方。

关于CDN的主题,特别是关于JavaScript,将jQuery之类的库从一个公共CDN中拉出来是有意义的。例如,Google通过其CDN提供了许多最受欢迎的库,这几乎总是比从您自己的服务器上提供的库更快。

我同意wevals页面大小仍然非常重要,特别是对于国际网站。在许多国家/地区,您需要根据下载的数据收费,因此,如果您的网站数量巨大,那么当您为小型网页提供服务时,您的访问者将会受益匪浅。

但是,为了真正归结起来,我不会过分担心“请求的字节成本”与“以字节为单位的总下载大小” - 你必须运行一个真正高流量的网站来担心那东西。而且这通常不是问题,因为一旦达到某个级别,如果没有CDN或其他缓存层,你真的无法承受任何数量的流量。

这很有趣,但我注意到有很多性能问题,如果你以合理和模块化的方式设计代码,你会更容易找到自然分色。因此,将有意义的事物捆绑在一起并在写作时自己保持一次性。

希望这有帮助。