当不重复背景图像时,渲染所需的时间仅取决于最终缩放的图像,而不是原始图像。
文件中的图像被压缩为PNG格式,但被浏览器加载后,它是RGBA位图格式(一个像素4字节)。当重复背景时(假设在 Intel x86 上),浏览器的本机代码将使用REP MOVSD将位图数据从 RAM 移动到视频内存(这是标准顺序,在图形驱动程序或特定 GPU 的各种实现上可能会有所不同)。
假设包含背景的 HTML DIV 的尺寸为 100x100。
对于只有 1 个像素的图像:浏览器程序必须执行1 万条“REP MOVSD”指令。
对于 10x10 的图像:对于每个重复的图像,浏览器程序只需执行 10 次“REP MOVSD”(1 次调用“REP MOVSD”可以渲染图像的 1 像素行(像素行))。所以在这种情况下,执行的“REP MOVSD”指令的数量只有 10x100 次(1 张图像中 10 次,100 次重复图像)。这总共需要1000 个 'REP MOVSD'。
因此,基于较大图像的最终背景渲染速度会更快。
更多注意事项:
上述解释并不意味着 10x10 图像的性能正好好 10 倍。'REP MOVSD'(例如 CX=9999)只有 1 条单 CPU 指令,但仍需要通过数据总线传输 9999x4 字节。如果使用 9999 个简单的 'MOV's,那么很多数据仍然需要通过数据总线,但是,CPU 必须执行更多的 9998 条指令。一个更聪明的浏览器会为背景创建一个带有复制图像的预渲染位图;所以每次需要传输到显存时,它只需要 100 个“REP MOVSD”(100 是最终背景中的像素行数,如上所示)而不是 10000 或 1000。