frontend-notes

图像相关概念

Web 中常用图格式

不同格式图片使用场景

图片缓存

浏览器和服务器之间使用的缓存策略可以分为强缓存、协商缓存两种:

使用Cache-Controlmax-age指令可以定义资源有效期 使用Etag只有当服务器资源发生变动时才去请求

多倍图

在 Retina 视网膜屏幕面世之前人们很少关注像素密度与设备像素比,随着 Retina 屏在移动设备中越来越广泛地应用,为了保证图片在不同 DPR(设备像素比)的设备上显示足够清晰,开发者需要针对不同设备适配不同倍数的图片。

像素相关概念

多倍图概念

自适应 DPR 加载图片

方法一:通过window.devicePixelRatio判断要加载几倍图

let url = photo.png
if (window.devicePixelRatio >= 3) {
    url = photo@3x.png
} else if (window.devicePixelRatio === 2) {
    url = photo@2x.png
}

方法二: 使用 img srcset 属性,除了 IE,现有主浏览器均已支持该属性。

<img src="photo.png" srcset="photo@2x.png 2x, photo@3x.png 3x" alt="photo" />

方法三: 使用 CSS3 img-set 函数,兼容性参考文档

background-image: image-set("photo.png" 1x, "photo@2x.png" 2x, "photo@3x.png" 3x);

方法四: 使用 picture 标签,除了 IE,现有主浏览器均已支持该标签。

<picture>
  <source srcset="photo@3x.jpg" media="(min-width: 800px)">
  <source srcset="photo@2x.jpg" media="(min-width: 600px)">
  <img srcset="photo.jpg">
</picture>

图像优化

参考