教条

根据各种Web性能优化手册,“减少HTTP请求”这一条始终被放在显眼的位置,其中就包括著名的YSlow和Google Page Speed,两者对这一教条的解释分别是:

80% of the end-user response time is spent on the front-end. Most of this time is tied up in downloading all the components in the page: images, stylesheets, scripts, Flash, etc.

YSlow表示,前端的多数时间是用在下载图片、样式表、脚本、Flash等,所以要减少HTTP请求。

RTT is the major contributing factor to latency on "fast" (broadband) connections.

Page Speed则表示,RTT(请求往返时间)是导致连接快不起来的主要原因,所以要减少,即减少HTTP的请求数。

疑惑

很少人会对这2大优化守则产生怀疑,因为它们即真理、即教条、即必须遵守之则,如有违逆,虽远必诛……

但是如果认真地去解读这2条规则,其他他们都表达了一个意思:网络上的往返越多,响应的速度就越慢。

但是他们却忽略了一个很重要的事情,那就是工作总用时多,并不代表任务完成时间也多,因为这里有一个概念,叫作并行

试想一个任务,用一个线程跑,和用100个线程跑,哪一个总用时更少?答案其实是一个线程,因为100个线程之间有线程切换的开销、有结果join的时间、有任务分割的时间……但是从结论上来看,哪一个能更快地跑完任务?答案是多线程,这就是并行计算的理论来源。

事实上,资源的下载也是如此,如果并行的话,多个资源的下载时间不见得会小于一个资源,如下图是一个合并后的资源的下载示意:

上图用来表示一个较大的资源的下载过程,其中不同的颜色分别对应:

  • 蓝色:TCP链接建立时间
  • 绿色:请求头发送时间
  • 紫色:服务器处理时间
  • 橙色:响应头发送时间
  • 红色:文件传输时间
  • 灰色:文件解析执行时间

如果将这个大资源分解成3个相等的小资源的话,那么他们的下载就可能是这样的:

由于浏览器只有一个线程可以对文件进行解析和执行,因此灰色的解析部分必定是串行的,需要相互等待。

比较2张图,假设其中的每一小块的时间为t,可以发现这样一个结论:一个大资源的加载,使用了13t的时间,而将大资源分解后,虽然总共用了21t的时间,但是客户端真正等待的时间却只有9t,比合并资源的方式节约了4t。

这就是并行的效果,当然要实现这个效果,是有前提的:

  • 并行的连接数没有超过浏览器的限制,这里假设4并行是一个比较合理地、照顾到各浏览器的值。
  • 服务器能顶得住,不会因为并发连接过多而导致处理时间变长。
  • 网络足够稳定,这一点将保证TCP建立、请求头发送、响应头发送这3段时间是稳定的。
  • 浏览器的资源加载不会阻塞,如IE6-7在下载js文件时会阻塞后续资源的请求,则不可能实现并行。

缓存的考虑

合并资源有另一个好处,就是在缓存之后,只需向服务器验证一次即可。但是再和拆分资源的加载过程作一个比较,如果采用带验证的缓存,不难得出下图:

而如果使用客户端的缓存,则是以下情况:

从上面2张图中可以看到,即便在有缓存的情况下,如果满足一定的条件,可以进行并发的话,若干个小资源的加载情况下客户端的等待时间和合并为一个大资源后是相同的,并没有多余的消耗。

总结

一个最基础的结论是,加载资源总用时客户端等待时间是2个完全不同的概念,他们之间并不存在正比的关系,而在宽带普及的当前时代,多数网络资源并不是按流量收费的,因此前端的优化应该更关注于客户端等待时间,而不是加载资源总用时和流量之上。

事实上,一个最经典的应用就是下载软件,从90年代的NetAnt开始,到其后的网际快车、迅雷,无一不具有“多线程下载”的能力。事实上多线程下载同样会因为线程的切换、文件分段的空间分配、最后多段碎片的拼接等导致总耗时更多,但也确确实实极大地缩短了下载的时间。在对页面的资源加载作优化时,是不是也可以参考一下这个模型呢?

由此,对资源的切分将会从单纯的“合并”的级别,提升到一种完全艺术的程度,综合考虑不同浏览器对资源加载的策略,最大限度利用浏览器的并行下载能力,从而正确、最优地分配静态资源域名,切分静态资源,压榨浏览器全部的能力,进一步地提升页面加载的速率。这虽然大大提高了资源管理、分解的复杂度,但是对于追求极限而言,本人认为这样才是真正的最佳实践。

最后,本文完全没有全部否定减少HTTP请求数这一优化原则的意思,只是希望从另外一个角度看问题,保持着一定的怀疑的心态来重新审视这一原则,拒绝不经过思考的无意义的遵循,从而寻找到在特定环境下,最适合、最优化的方案。

本文永久地址:http://www.otakustay.com/doubt-on-fewer-http-requests/

转载于:https://www.cnblogs.com/GrayZhang/archive/2011/05/19/doubt-on-fewer-http-requests.html

对减少HTTP请求的疑问相关推荐

  1. 使用CSS sprites减少HTTP请求

    sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉很简单的东西,作用却很大 神马是CSS 小妖精 CSS sprites是指把网页中很多小图片(很多 ...

  2. 《高性能网站建设指南》笔记-2 规则1——减少HTTP请求

    前一篇的性能黄金法则(Performance Golden Rule)揭示了只有10%-20%的最终用户响应时间花在接收所请求的HTML文档上.剩下的80%-90%时间花在为HTMl文档所引用的所有组 ...

  3. Web项目性能优化之减少HTTP请求次数优化

    作为项目经理的我,在近两个月内,时常被客户抱怨,我们的Web程序性能太差,经常宕机,即使服务器的配置再好,在业务请求量大的情况下也比较容易出现系统繁忙,线程堵塞,最后Web容器的HTTP线程池被慢慢耗 ...

  4. 前端性能优化-减少HTTP请求数

    1.图片地图 图片地图允许在一个图片上关联多个URL,目标URL取决于用户单击的图片上的位置. 1) 优点: 把多张图片整合到一张图片中,虽然文件的总体大小不变,但可以减少HTTP请求数. 2) 使用 ...

  5. 优化--减少HTTP请求

    一. 图片地图 (将几张图片合为一张,根据用户点击的位置发送不同请求,减少了图片的请求数量) 案例所在位置:http://stevesouders.com/hpws/imagemap.php 二.cs ...

  6. 减少HTTP请求之合并图片详解(大型网站优化技术)

    一.相关知识讲解 看过雅虎的前端优化35条建议,都知道优化前端是有多么重要.页面的加载速度直接影响到用户的体验.80%的终端用户响应时间都花在了前端上,其中大部分时间都在下载页面上的各种组件:图片,样 ...

  7. 减少HTTP请求(大型网站优化技术)

    在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文 我们讲解了 "利用将小图标合成一张背景图来减少HT ...

  8. 减少HTTP请求的方法

    最近在看<高性能网站建设指南>,学习一些网站优化的技术,读到关于减少http请求的一些方法:   1. 图片地图 图片地图允许你在一个图片上并联多个URL,目标URL的选择取决于用户单击了 ...

  9. 高并发大流量专题---3、前端优化(减少HTTP请求次数)

    高并发大流量专题---3.前端优化(减少HTTP请求次数) 一.总结 一句话总结: 图片地图:使用<map><area></area></map>标签. ...

最新文章

  1. 【EMC】EMC屏蔽设计
  2. 解决iOS机型点击输入框不能聚焦的问题
  3. 关掉Ctrl+Alt+方向键转屏功能
  4. 腾讯云数据库团队:MySQL5.7 JSON实现简介
  5. 初学Java,这些框架你要掌握
  6. Visual Studio fatal error C1902: 程序数据库管理器不匹配;请检查安装
  7. bpmn如何查看代码 idea_提高程序员效率的IDEA插件推荐(五大神器)
  8. git——学习笔记(三)分支管理
  9. fir c语言程序,fir.rar fir的c语言程序 - 下载 - 搜珍网
  10. html瀑布流下拉刷新,瀑布流下拉刷新 - osc_1wnye1so的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. 2011年3月四级网络工程师笔试试卷 解答思路
  12. python自动化办公入门书籍-盘点使用Python进行自动化办公所需要的知识点
  13. windows 编写的硬件驱动_驱动更新有什么好处(一文解读驱动更新细则)
  14. 技术人真的能做一辈子技术么?
  15. 数据结构之--series,DataFrame.use python and pandas for data mining
  16. lpb.wifi index.php,lpb(法国lpb是什么品牌)
  17. ios 4.2.1完全越狱图文教程
  18. Tab页的两种写法 - jeesite记录
  19. iOS swift MD5加密
  20. Visdom 介绍 | 二

热门文章

  1. 最吓人的鬼故事排行榜前十名
  2. 晴 · 雨 | 草原天路 同一空间 双面气质
  3. css如何翻转背景图像,使用CSS反转父元素的背景图像
  4. 【文件上传】.htaccess上传
  5. Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理
  6. 【计算机视觉】摄像机标定2 原理篇
  7. JAVA世界的入门引领者——郝彬老师的视频
  8. 华为交换机路由器防火墙密码忘记恢复方法
  9. 百度超级链与重庆市联合打造的电子处方流转平台,并荣获可信区块链高价值案例
  10. 转:《米与盐的年代》一部没有西方文明的世界史