在之前的文章中,我们讨论了图片的尺寸自适应、裁切与缩放、压缩、动态webp等技术。这些技术都是对单张图片的处理,而在实际项目中,我们往往需要处理大量的图片。本文将讨论如何高效批量优化图片,并介绍一些图片加载技巧。一、图片预加载图片预加载(Preloading Images)是一种提前加载即将使用的图片资源的技术。通过在页面加载时就将未来可能用到的图片资源进行预加载,可以在用户真正需要这些图片时,减少等待时间,提升用户体验。HTML中的预加载在HTML中,可以通过标签的rel属性来实现图片预加载。例如,我们可以在页面的`javascript? 1const?lazyImages?=?document.querySelectorAll('img[data-src]'); 2 3//?判断浏览器是否支持?loading?属性 4if('loading'?in?HTMLImageElement.prototype)?{ 5lazyImages.forEach(img?=>?{ 6img.src?=?img.dataset.src; 7}); 8}?else?if('IntersectionObserver'?in?window)?{ 9//?使用Intersection?Observer?API实现懒加载10const?intersectionObserver?=?new?IntersectionObserver((entries)?=>?{11entries.forEach(entry?=>?{12if?(entry.isIntersecting)?{13const?img?=?entry.target;14img.src?=?img.dataset.src;15intersectionObserver.unobserve(img);16}17});18});1920lazyImages.forEach((img)?=>?{21intersectionObserver.observe(img);22});23}?else?{24//?使用scroll事件实现懒加载25let?lazyImages?=?document.querySelectorAll('img[data-src]');26function?lazyLoad()?{27lazyImages.forEach((img)?=>?{28if?(img.offsetTop?javascript: 1document.addEventListener('DOMContentLoaded',?function()?{ 2const?lazyImages?=?document.querySelectorAll('img[data-src]'); 3lazyImages.forEach(img?=>?{ 4const?placeholder?=?new?Image(); 5placeholder.src?=?img.src; 6placeholder.onload?=?()?=>?{ 7img.src?=?img.dataset.src; 8}; 9});10});?img src 属性中的图片是一个模糊的小图,data-src 属性中的图片是高分辨率图像。在页面加载时,先显示模糊的小图,待高分辨率图像加载完成后再替换。使用占位图技术可以有效减少页面的加载时间,提升用户体验。同时,占位图技术也可以结合图片懒加载技术一起使用,进一步提升页面性能。四、Base64 编码在 Web 开发中,将图片转换为 Base64 编码是一种优化页面加载速度的方法,但需要权衡其优缺点。一般来说,适用于 Base64 编码的图片大小取决于几个因素,包括页面的总体加载时间、HTTP 请求的数量以及文件大小。Base64 编码的优点减少 HTTP 请求:将图像嵌入到 HTML 或 CSS 中可以减少 HTTP 请求,从而加快页面加载速度。对于小图标或背景图片,效果尤为显著。?简单易用:Base64 编码图像是一种文本格式,可以方便地嵌入 HTML、CSS 或 JSON 中,不需要额外的图像文件管理。适用于小图像:Base64 编码特别适合用于小图像,例如网站的 logo、按钮、图标等。Base64 编码的缺点增加文件体积:Base64 编码会使文件体积增加,因此对于大图像,不推荐使用这种方法。缓存问题:由于 Base64 图像嵌入在 HTML 或 CSS 文件中,浏览器不能单独缓存这些图像文件,因此在更新图像时需要重新下载整个 HTML 或 CSS 文件。可读性差:Base64 编码图像是一长串字符,嵌入到文档中会降低文档的可读性和可维护性。适合转为 Base64 的图片大小一般为 1KB 到 10KB 的图片:通常,文件大小在 1KB 到 10KB 之间的图片是转为 Base64 编码的最佳选择。这样的图片往往是小图标、按钮、背景图案等。对于这些小图片,Base64 编码可以显著减少 HTTP 请求的数量,从而提升页面加载速度。在实际Web项目开发中,使用 Webpack或 Vite 将小图片自动转换为 Base64 编码是一个常见的优化方法。这种自动化的处理可以简化开发流程,并确保在构建过程中优化资源。webpack 配置示例: 1module.exports?=?{ 2module:?{ 3rules:?[ 4{ 5test:?/\.(png|jpe?g|gif)$/i, 6use:?[ 7{ 8loader:?'url-loader', 9options:?{10limit:?10240,?//?10KB11},12},13],14},15],16},17};Vite 配置示例:1import?{?defineConfig?}?from?'vite';23export?default?defineConfig({4build:?{5assetsInlineLimit:?10240,?//?10KB6},7});在以上配置中,limit?或 assetsInlineLimit?选项指定了图片转为 Base64 编码的阈值,超过这个阈值的图片将被单独打包为文件,而小于这个阈值的图片将被转为 Base64 编码。五、结语通过结合多种图片加载与优化技术,可以提升页面性能,提供更好的用户体验。预加载、懒加载、渐进式加载等技术在不同场景下有着不同的优势,通过合理地选择和组合这些技术,可以有效地优化图片加载过程。在实际项目中,建议根据项目的具体需求,选择合适的技术和工具进行图片优化和加载。希望本文所介绍的技术和示例代码能够帮助您更好地实现图片批量处理与加载优化,提升网页的加载速度和用户体验。WEB 图片优化的相关文章到此结束,希望对你有所帮助。如果有任何问题或建议,欢迎在评论区留言,谢谢!六、历史相关文章图片优化入门:前端工程师的图片效率指南之家-梁家玮,公众号:之家前端共享流图片优化入门:前端工程师的图片效率指南Web图片优化指导:最佳图片显示效果与用户体验之家-梁家玮,公众号:之家前端共享流Web图片优化指导:最佳图片显示效果与用户体验