面试题答案
一键面试整体思路
- 检测设备分辨率:在客户端利用JavaScript的
window.screen.width
和window.screen.height
获取设备分辨率,或者在服务端通过请求头信息(如User - Agent
结合一些库进行解析)来判断设备类型及分辨率范围。 - 制定压缩策略:根据不同分辨率范围,确定不同的图像压缩质量、格式(如WebP对于高分辨率设备,JPEG对于低分辨率设备等)。
- 延迟加载与预加载逻辑:在延迟加载基础上,设定自定义预加载逻辑,比如当图像进入视口一定距离(可通过
IntersectionObserver
API检测)前开始预加载。
关键技术点
- 设备分辨率检测:
- 客户端:
window.screen
对象提供屏幕相关信息。 - 服务端:解析
User - Agent
头信息,可使用ua - parser - js
等库。
- 客户端:
- 图像压缩:
- Next.js内置
next/image
组件支持图像优化,可通过配置quality
、format
等属性。可结合sharp
库(Next.js底层使用)进行更细粒度的压缩控制。
- Next.js内置
- 延迟加载与预加载:
- 延迟加载:
next/image
组件默认支持延迟加载。 - 预加载:利用
IntersectionObserver
API监听图像与视口的相交变化,在合适时机触发预加载。
- 延迟加载:
与Next.js现有图像优化机制融合
- 配置
next.config.js
:在next.config.js
中配置images
属性,可设置全局的图像优化选项,如formats
、quality
等。根据设备分辨率动态调整这些配置。 - 自定义
next/image
组件:封装next/image
组件,在组件内部实现设备分辨率检测及压缩策略切换逻辑,同时加入预加载逻辑。在页面中使用自定义组件替代原生next/image
组件,确保定制扩展无缝融入现有项目的图像优化流程。