多个小文件v / s HTTP请求的一个大文件

时间:2012-06-13 08:33:46

标签: c# asp.net performance http web

我想知道哪一个更好的方法, 让多个小型文件由多个HTTP请求请求 要么 有一个大文件可以立即申请

Plz提供专业知识因为我在网上得到了相互矛盾的搜索结果,所以这两种方法都是合理的。

3 个答案:

答案 0 :(得分:4)

Yahoo页面上的一个提示是最小化HTTP请求

http://developer.yahoo.com/performance/rules.html#num_http

主要原因是我们在每个请求中都有一个额外的开销。正如雅虎所说:

  

最终用户响应时间的80%用于前端。大多数   这一次与下载页面中的所有组件有关:   图像,样式表,脚本,Flash等减少数量   组件反过来减少了所需的HTTP请求数   渲染页面。这是加快页面的关键。

特别针对ASP.Net

在每次ASP.Net调用中,我们还会对整个页面请求进行会话锁定。这意味着所有用户的所有请求都必须等待,因为会话锁定了页面的其余部分,直到当前页面完成。

即使这听起来很糟糕,它对于开始和小型网站也有很大帮助,因为它对所有数据的同步有很大帮助,而不仅仅是会话。

因此,通过多次调用,您可以获得一系列数据,而不是并行获取数据。

参考:jQuery Ajax calls to web service seem to be synchronous

Replacing ASP.Net's session entirely

开销Cookie

在每个请求中,您还有从浏览器到服务器的cookie。因此,如果您的cookie接近500字节并且您拨打100个电话,则需要额外移动50KB的数据。这可以使用无cookie的域来解决,但是如果你没有这个选项,那么下一步就是尝试减少调用。

参考:http://developer.yahoo.com/performance/rules.html#cookie_free

精灵

如果您要在浏览器上下载和显示许多图像,针对包含精灵或其他图像的一个文件图像,浏览器可以缩短渲染时间,因为浏览器会重新渲染每个图像的每个部分。但是如果图像出现在一个精灵文件中,那么浏览器只需要一个动作就可以呈现它们 - 所以浏览器的文件更少会更快。

脚本和CSS

同样的事情在这里。将所有javascript组合在一个或两个文件中后,浏览器就可以获取它并在一次解析它们。如果你有多个文件,那么浏览器需要逐个解析它们。另外,如果你gzip压缩javascript文件,它会比拥有许多小文件好得多。

何时使用更多请求

对我来说,当这些数据可以与用户交互时,您可以使用ajax请求更多数据。这可能是请求额外数据库调用和计算的信息,您可以在第一次请求时避免这些信息,并且用户可能永远不会要求它们。

您可以通过这种方式拆分请求,仅在用户请求时获取额外数据,如果这样做,您将减少数据库调用。

例如,在亚马逊的页面上,只有当您在旋转木马中要求更多项目时,轮播控件才会加载额外的项目,或者仅在您下到页面时显示用户历史记录。

答案 1 :(得分:3)

我不知道整个情况,不知道你如何定义"大文件",但是我不知道如何:

一个大文件

  • +可能更大的压缩率
  • +减少往返服务器的次数
  • - 下载更多数据

几个较小的文件

  • +客户端可能已经拥有其中一些,因此传输的数据较少
  • - 更多往返服务器

答案 2 :(得分:1)

就像有人在没有背景的情况下问一个开放式问题一样,“这取决于。”

如果您通过网络一次性发送大量数据,将其拆分为较小的块只会增加开销。压缩通常可以更好地处理大型数据,每个请求的开销并不是无关紧要的,并且创建和维护单个数据流对服务器有好处。

但是,由于您已经标记了此ASP.NET,因此可以合理地假设您正在讨论典型的网页数据。该数据通常通过使用分为单个文件:样式表,脚本,页面内容,图像等。

这有一个方便的原因:作为开发人员,使用只有一种内容的文件更容易。从技术上讲,你可以将所有图像文件作为二进制数据嵌入到HTML文件的标记中,但这使编辑图像变得非常困难!

性能方面,较小的文件确实会使初始传输速度略微减慢,但后续传输的速度通常会受益。大多数客户端浏览器将缓存单个文件,不会重复下载这些文件。通过将内容分解为更小的文件并在多个页面中重复使用这些文件,我们减少了跨多个请求下载特定数据片段的次数。通过这种方式,您可以将可重复使用的内容分成较小的文件,从而提高整个网站的性能。

相关问题