【发布时间】:2011-08-07 12:21:53
【问题描述】:
“简单”问题。
对站点元素使用大型 spritesheet 是否比使用多个图像更好? 我的意思是,额外的 CSS 图像处理(背景定位大图像并对其进行裁剪)是否补偿了较少的 HTTP 图像请求?
【问题讨论】:
标签: css httprequest
“简单”问题。
对站点元素使用大型 spritesheet 是否比使用多个图像更好? 我的意思是,额外的 CSS 图像处理(背景定位大图像并对其进行裁剪)是否补偿了较少的 HTTP 图像请求?
【问题讨论】:
标签: css httprequest
number of concurrent HTTP/1 connections to a host 被限制为大约 6 个。假设延迟为 100 毫秒,则发布的 sprite 中大约 60 个图像至少需要一秒钟的时间来下载(可能更多,因为需要生成 HTTP 请求和响应,并且已解析)。
由于 sprite 图像的大小与单个 sprite 大致相同,并且图像处理速度非常快(我估计所有 60 个图像加在一起的时间远低于
总之,使用精灵通过 HTTP/1 处理徽标和小图像。
HTTP/2 旨在不再需要变通方法。最重要的是,可以通过同一个 TCP 连接同时处理多个请求。此外,标头压缩旨在压缩冗余标头,例如 User-Agent 或 Accept。
【讨论】:
HTTP/2 标准和改进的并行下载。另外,如果您使用多张图片,您只能在当前滚动高度下载您需要的图片。
通常最好使用许多小图像的精灵。
每张图片都会创建额外的 http 请求,这需要时间。特别是在 HTTP 1.0 中,每个新请求都需要等待之前的响应。
对于非常大的图片 - 它主要取决于传输一组图像所需的时间与来自 HTTP 协议的时间开销的比率。如果开销不大并且您认为如此大的图像会降低您的应用程序的速度 - 您可以使用多个图像,如果相关的话 - 使用 css sprites。
【讨论】:
是的,对于任何合理的图像尺寸,它都会更快。
绘制较大图像的一部分并不比绘制整个较小图像慢。这不像浏览器正在绘制整个图像并删除未显示的部分,它只是绘制正在显示的图像部分。它只是从内存中复制像素,如果像素在内存中靠近或在更大的图像中分散开,则无关紧要。
较大的图片加载较小的图片需要更长的时间,因此较小的图片会开始显示得更快,但大图片的加载速度要比所有小图片加起来快得多。即使在图像开始显示之前您必须等待更长的时间,所有图像都会立即显示,而不是一次弹出一个。
【讨论】:
当然,这样更好。与对更多文件的许多请求相比,浏览器将只请求文件。
为许多在您的设计中容易重复的小图像使用精灵(ex 的图标)。对于大型照片,如果是照片库,这不是一个好主意。
【讨论】: