1

我想知道哪种方法更好,多个 HTTP 请求要请求多个小文件,或者一次请求一个大文件

Plz 也提供了这两种方法的优缺点,因为我在网上得到了相互矛盾的搜索结果。

4

3 回答 3

6

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

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

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

80% 的最终用户响应时间都花在了前端。大部分时间都用于下载页面中的所有组件:图像、样式表、脚本、Flash 等。减少组件的数量反过来会减少呈现页面所需的 HTTP 请求数量。这是加快页面速度的关键。

特别适用于 ASP.Net

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

即使这听起来很糟糕,但它对启动和小型站点有很大帮助,因为它对所有数据的同步有很大帮助,而不仅仅是会话。

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

参考:对 Web 服务的 jQuery Ajax 调用似乎是同步的

完全替换 ASP.Net 的会话

Cookie 开销

对于每个请求,您还拥有从浏览器到服务器的 cookie。因此,如果您的 cookie 接近 500 字节并且您进行了 100 次调用,那么您有额外的 50KB 数据需要移动。这可以使用无 cookie 域来解决,但如果您没有此选项,那么接下来就是尝试减少调用。

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

精灵

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

脚本和 CSS

同样的事情也发生在这里。一旦你将所有的 javascript 合并到一个或两个文件中,浏览器就可以一次性获取并解析它们。如果您拥有尽可能多的文件,则浏览器需要逐一解析它们。此外,如果您 gzip 压缩 javascript 文件,它将比拥有许多较小的文件要好得多。

何时使用更多请求

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

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

例如,在亚马逊的页面上,轮播控件仅在您在轮播中请求更多商品时才加载额外的商品,或者仅在您向下浏览页面时才显示用户历史记录。

于 2012-06-13T08:52:12.613 回答
3

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

一个大文件

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

几个较小的文件

  • +客户端可能已经有一些,所以要传输的数据更少
  • - 更多往返服务器
于 2012-06-13T08:53:38.390 回答
1

与往常一样,当有人问一个没有上下文的开放式问题时,“这取决于”。

如果您一次通过网络发送大量数据,将其分成更小的块只会增加开销。压缩通常对较大的数据效果更好,每个请求的开销并不小,创建和维护到服务器的单个数据流也有好处。

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

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

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

于 2012-06-13T09:02:55.447 回答