简短回答——浏览器预取。 除非使用JS执行以下操作,否则他们不能做任何事情: 1. 进行媒体查询测试,使用JS,如果支持则填充高质量图像。 2. 进行媒体查询测试,使用JS并填充CSS样式表(其中包含url声明),如果支持则填充。 这里的目标不是减少HTTP请求。而是减少并发HTTP请求的数据,在很大程度上是冗余的-如果浏览器不支持高分辨率版本,但仍然被强制占用带宽,这种情况尤其突出。 JS操作的好处: 1. 页面加载速度更快,因为只下载了较轻的媒体文件。 2. 页面加载期间HTTP请求数更少。在请求HQ图像时,页面的其他部分已经设置好,因此“额外请求”不会影响体验(除非他们在DOM访问等方面做了一些愚蠢的事情-但这是一个普遍的真理)。 最终,“picture”规范与“source”元素的“srcset=”和“media=”属性相结合,将允许一种无需JS的方法,根据其自身的查询和页面分析(例如:用户是否在LTE连接上,还是他们目前在山区2G网络中)允许浏览器智能处理媒体文件。
为节省初始加载时间。特别是在像无线/3G这样的慢速/不稳定连接上。如果您查看图像替换代码(https://gist.github.com/2029936)的格式化源代码,特别是函数__replaceNextQueue,您会注意到它在实际替换图像之前设置了超时。这样做是为了确保浏览器事件队列已经完成,包括UI的初始绘制,然后再开始请求新图像。这使得浏览器可以下载更小(文件大小)的图像,并且用户可以在开始处理较大的图像之前执行他们的新操作。将较大的图像下载推迟到UI的初始绘制之后,将节省时间,特别是在较慢的连接上。