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

本文关键字:文件 用于 一个 HTTP 请求 小文 | 更新日期: 2023-09-27 18:36:56

我想知道哪一个是更好的方法,有多个 HTTP 请求要请求的小型文件或一次请求一个大文件

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

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

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

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

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

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

特别适合 ASP.Net

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

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

因此,对于多个调用,您有一个获取数据的序列,而不是并行获取数据。

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

完全替换 ASP.Net 的会话

开销的饼干

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

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

精灵

如果要下载许多图像并在浏览器

上显示,则针对一个包含精灵或其他图像的文件图像,浏览器可以减少渲染时间,因为浏览器会重新渲染每个图像的每个部分。但是,如果图像出现在一个 sprite 文件中,则浏览器只需执行一个操作来渲染它们 - 因此浏览器拥有更少的文件会更快。

脚本和 CSS

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

何时使用更多请求

对我来说,当这些数据可以随用户交互一起提供时,您可以使用 ajax 请求更多数据。这可以是请求额外数据库调用和计算的信息,您可以在第一个请求时避免这些信息,并且用户可能从未真正请求过它们。

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

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

我不知道

整个情况,不知道你如何定义"大文件",但在我的头顶上:

一个大文件

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

几个较小的文件

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

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

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

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

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

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