八、图片显示优化 问题:让你优化图片显示你怎么优化 // 1. 格式选择 // WebP > AVIF > JPEG/PNG // WebP比JPEG小25-35%,比PNG小80% // 2. 响应式图片 <img src="image-800.jpg" srcset=" image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w " sizes=" (max-width: 500px) 400px, (max-width: 900px) 800px, 1200px " > // 3. 懒加载 <img loading="lazy" src="image.jpg"> // 4. 渐进式加载 function ProgressiveImage({ src, placeholder }) { const [currentSrc, setCurrentSrc] = useState(placeholder) useEffect(() => { const img = new Image() img.src = src img.onload = () => setCurrentSrc(src) }, [src]) return ( <img src={currentSrc} style={{ filter: currentSrc === placeholder ? 'blur(10px)' : 'none' }} /> ) } // 5. 使用CDN // 加上图片处理参数 https://cdn.example.com/image.jpg?w=800&q=75&format=webp // 6. 缓存策略 // 强缓存 + hash文件名 Cache-Control: max-age=31536000 // image-8f3c9d.jpg // 7. 预加载关键图片 <link rel="preload" as="image" href="hero.jpg"> // 8. 使用Intersection Observer const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target img.src = img.dataset.src observer.unobserve(img) } }) }) 九、WebP兼容性降级 问题:webp格式的图片有兼容性问题吗,怎么做降级处理 // 1. picture标签(最推荐) <picture> <source srcset="image.webp" type="image/webp"> <source srcset="image.jp2" type="image/jp2"> <img src="image.jpg" alt="fallback"> </picture> // 2. 特性检测 function supportsWebP() { const canvas = document.createElement('canvas') if (canvas.toDataURL) { return canvas.toDataURL('image/webp').indexOf('image/webp') === 0 } return false } // 使用 const src = supportsWebP() ? 'image.webp' : 'image.jpg' // 3. 服务端检测 app.get('/image', (req, res) => { const accept = req.headers['accept'] if (accept && accept.includes('image/webp')) { res.setHeader('Content-Type', 'image/webp') res.sendFile('image.webp') } else { res.sendFile('image.jpg') } }) // 4. Modernizr if (Modernizr.webp) { // 使用WebP } else { // 使用降级格式 } // 5. Next.js自动处理 <Image src="/image.jpg" /> // 自动检测Accept头,返回对应格式 // 6. 批量转换工具 // 构建时生成webp版本 const imagemin = require('imagemin') const imageminWebp = require('imagemin-webp') await imagemin(['images/*.{jpg,png}'], { destination: 'public/images', plugins: [imageminWebp({ quality: 75 })] }) // 7. 动态加载 const webpSupported = await checkWebPSupport() const imageUrl = webpSupported ? '/img.webp' : '/img.jpg' 原文链接:https://blog.csdn.net/weixin_50077637/article/details/158740098图片777
张小明
前端开发工程师
从点亮第一颗灯到运行GBA游戏:我的高云Tang Nano 4K/9K FPGA入门实战全记录
从点亮第一颗灯到运行GBA游戏:我的高云Tang Nano 4K/9K FPGA入门实战全记录第一次拿到高云Tang Nano开发板时,那种既兴奋又茫然的感觉至今记忆犹新。作为FPGA领域的新手,面对这块小巧却功能强大的开发板,我既期待能快速实现酷炫的…
ESP32 BLE Mesh配网踩坑实录:为什么你的Client例程绑定AppKey总失败?
ESP32 BLE Mesh配网深度解析:Client模型绑定AppKey失败的根源与解决方案在物联网设备组网技术中,BLE Mesh凭借其低功耗、自组网特性成为智能家居、工业控制等场景的热门选择。ESP32作为支持BLE Mesh协议的明星芯片,其官方提供的例程是开发者快…
Alexa for Startups:智能语音硬件与技能开发的实战指南
1. 项目概述:当智能语音助手遇见初创生态如果你是一位智能硬件创业者,或者正在开发一款需要语音交互的消费级应用,那么“Alexa for Startups”这个项目,很可能就是你一直在寻找的“东风”。这不仅仅是亚马逊将其广为人知的Alexa语…
认知科学视角下的高效决策:选择性遗忘如何提升复杂问题解决能力
1. 项目概述:棋手记忆的悖论 “要下得像一位象棋大师,你需要学会如何遗忘。” 这句话乍一听像是某种玄学,或者是对“忘掉过去,专注当下”这种心灵鸡汤的另一种表述。但如果你真的接触过职业棋手,或者深入钻研过任何需要…
C盘爆满救星:用mklink命令把Win10用户文件夹(Users)无损挪到D盘(保姆级教程)
Windows用户文件夹迁移全指南:安全释放C盘空间的终极方案每次打开资源管理器看到C盘那刺眼的红色警告条,是不是感觉血压都升高了?作为Windows系统的核心存储区域,C盘空间不足不仅影响系统性能,更可能直接导致关键功能失…
小心这个坑!在Unity中频繁操作Animator控制器,可能悄悄引发WakeUp空引用异常
深度解析Unity中Animator控制器操作引发的WakeUp空引用异常在Unity项目开发中,Animator控制器是构建角色动画系统的核心组件之一。许多开发者都曾遇到过这样的场景:当频繁修改动画状态机、调整参数或替换控制器资源时,Unity编辑器突然抛出&qu…