我想知道哪种方法更好,
由多个http请求请求多个小文件
或者
一次需要一个大文件
plz也提供了这两种方法的优缺点,因为我在网上得到了相互矛盾的搜索结果。
最佳答案
yahoo页面上的一个技巧是最小化http请求
http://developer.yahoo.com/performance/rules.html#num_http
主要原因是我们在每个请求中都有一个额外的开销。正如雅虎所说:
80%的最终用户响应时间花在前端。大部分
这一次下载页面中的所有组件是很困难的:
图像、样式表、脚本、flash等,减少
组件反过来减少了
呈现页面。这是快速页面的关键。
特别是asp.net
在每一个asp.net调用中,我们还拥有整个页面请求的会话锁。这意味着所有用户的所有请求都必须等待对方,因为会话将锁定页面的其余部分,直到当前页面完成。
即使这听起来很糟糕,但它对start和小型站点也有很大帮助,因为它不仅有助于会话同步所有数据。
因此,对于多个调用,您有一个获取数据的序列,而不是并行获取数据的序列。
参考:jQuery Ajax calls to web service seem to be synchronous
Replacing ASP.Net's session entirely
饼干开销
在每个请求中,您还拥有从浏览器到服务器的cookie。所以如果你的cookie接近500字节,并且你打了100个电话,你就有额外的50kb数据要移动。这可以用一个没有cookie的域来解决,但是如果你没有这个选项,下一步就是尝试减少调用。
参考:http://developer.yahoo.com/performance/rules.html#cookie_free
精灵
如果您有许多图像要下载并显示在浏览器上,相对于包含精灵的一个文件图像或其他图像,浏览器可以缩短渲染时间,因为浏览器正在重新渲染每个图像的每个部分。但是,如果图像来自一个sprite文件,那么浏览器只会执行一个操作来渲染它们——因此浏览器拥有更少的文件会更快。
脚本和css
这里也一样。一旦将所有javascript合并到一个或两个文件中,浏览器就可以在一次内获取并解析它们。如果你有足够多的文件,那么浏览器需要逐个分析它们。此外,如果gzip压缩javascript文件,它将比拥有许多较小的文件要好得多。
何时使用更多请求
对我来说,当这些数据可以与用户交互时,您可以使用ajax来请求更多的数据。这可能是请求额外的数据库调用和计算的信息,您可以在第一次请求时避免这些信息,而且可能用户从未真正请求过它们。
您可以这样分割请求,只有当用户请求时才能获取额外的数据,如果这样做,您将减少数据库调用。
例如,在amazon的页面上,carousel控件仅在您请求carousel中的更多项时加载额外项,或者仅在您下一页时显示用户历史记录。