DTeam 技术日志

Doer、Delivery、Dream

网站优化技巧之图片容量优化

冯宇 Posted at — Sep 13, 2020 阅读

前言

图片一直是网站中容量占比最大的部分,合理优化图片容量将会大大提高用户的体验。同时,优化图片容量也会大大减少网站流量的消耗,达到节约流量费用的目的。本文将会从图片格式、图片压缩、图片格式转换三个角度分享优化图片容量的经验。

图片格式选择

图片格式繁多,不同的浏览器对图片支持也略有不同,概览表格可以参见 MDN 图像文件类型与格式指南

为了最大限度的通用性,网站通常只考虑以下三种图片: png, jpg, gif(未来如果 webp 能大一统基本不做考虑了)

关于这几种图片的使用场景,我简单总结一下:

png

jpg

gif

注意: gif 不适合存放长时间的动画,容量太大,并且不支持渐进式加载。对于时间长、分辨率较高的动图场景,应该考虑直接用<video>

我们的实践

我们的网站(blog.dteam.top)的文章图片主要有两种,照片和桌面截屏。对于照片采用 jpg,对于截屏采用 png。

图片压缩

对于网页图片用户往往并不在乎太高的质量,更关心的是加载速度,因此合理化压缩图片可以带来更好的用户体验。

在线压缩推荐 tinypng( https://tinypng.com/) ,同时支持 png 和 jpg 图片,使用简单,压缩质量好,建议图片放到版本库之前都先用 tinypng 压缩一遍。

如果本地需要批量压缩可以使用命令行工具,这里推荐下 pngquant(只支持 png)和 imgopt(同时支持 png 和 jpg),他们都可以很方便的在脚本中进行调用,进行快速批量化的图片压缩,注意合理设置一下量化质量,可以达到更好的压缩效果。

图片格式转换

使用图片格式转换可以选择更优的图片格式进行容量优化,如 png 照片转换成 jpg 可以节省几十倍的容量。

如果目标浏览器支持webp更好(如微信端、Chrome 浏览器等),几乎不作任何选择,一律使用 webp 即可,更好的压缩比,支持动图,几乎成了未来图片格式的不二之选,然而直到今天 webp 也没有实现全平台支持。

关于 webp 的浏览器兼容性可以参见: https://caniuse.com/webp

利用阿里云 CDN 边缘脚本实现自适应转换 webp

2021-08-24 Update: 阿里云当前推出了 CDN 级别自适应 webp 的功能,无需像以前一样手工编写脚本了,以下内容依旧保留,有特殊定制需求依旧可以参考。仅仅是自适应 webp 的话建议直接打开 CDN 的开关就够了。相关文档: https://help.aliyun.com/document_detail/193593.html

脚本部分参考自: https://www.duotela.com/1868.html

在云服务盛行的今天,合理利用云服务带来的便利性可以帮我们解决很多棘手问题。

理论上完全可以在浏览器端添加一个 js,自动判断浏览器是否支持 webp,决定访问 webp 图片或者原图。不过这样在本地的工作量就太大了,每次添加图片还得多转换一个 webp 图片,本地的工作量太大了。我们可以利用阿里云 OSS 的图片转换功能,以及 CDN 的边缘脚本实现浏览器自动使用 webp 图片的功能,本地不作任何处理,不影响原来的开发流程。

我们需要在 OSS 上添加一个 webp 的格式转换,以我们的网站(blog.dteam.top)为例,设置的样式如图:

OSS图片样式入口 OSS样式设置

然后在 CDN 的边缘脚本处新增脚本:

CDN边缘脚本

脚本内容如下:

m1 = and($http_accept, match_re($http_accept, '.*image\/webp.*'))
m2 = match_re($uri, '.+(.JPEG|.jpeg|.JPG|.jpg|.PNG|.png)$')
uri_is_posts = match_re($uri, '^/posts')

if and(m1, m2) {
    if uri_is_posts {
        rewrite(concat($uri, '!webp_watermark'), 'break')
    } else {
        rewrite(concat($uri, '!webp'), 'break')
    }
}

: 这里我使用了rewrite的方案,而不是像参考文章那样使用的redirect,是遵循了雅虎前端最佳实践中的 Avoid Redirects这一条,即尽可能避免跳转,以便减少浏览器的请求,加快页面访问速度。通过 Chrome 浏览器的 F12 工具可以看到访问图片链接的时候返回依旧是200,但是content-type却是image/webp,而不是返回301302之后再跳转到真实的图片 URL 上去。

这样就完成了。大家可以试试分别用 Chrome 和 IE(或其他不支持 webp 的浏览器,如 Safari)打开本页,看看 F12 工具返回的图片,同时对比下容量看看。

尾注

为了帮助我们优化网站,推荐使用 lighthouse 检测(当前已经集成到 Chrome/Chromium/Edge 浏览器的 F12 工具,不用单独装,也可以使用 Insights在线检测),有目的性的优化。

如我们的网站(blog.dteam.top)经过本文内容优化后,当前在 Insights/Lighthouse 的图片容量优化检测已经通过了:

insights图片容量检测

觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :

付费文章

友情链接


相关文章

深圳SEO优化公司品牌网站优化加盟代理项目宁德市网站seo优化方案吉林网站优化排名网站排名优化软件实惠火12星海安网站优化可信赖的常州网站优化鄄城县网站关键词优化平顶山专业网站优化地址中科互通网站优化东明网站优化公司seo网站优化哪家关键词多普定网站seo优化公司无锡厚桥网站权重优化西安网站优化电池网站首页改版影响优化德阳百度优化推广网站河北瓷砖行业网站优化推广价格韶关网站竞价优化运营网站优化的价值芝罘区个性化网站优化广元网站优化软件德化网站优化石材行业网站优化案例兰州市资深的网站优化沈阳有实力的网站优化推广甘肃网站排名优化公司无锡网站推广优化费用兴平关键词网站优化浦口区网站优化网站排名优化 来周o斯可以歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化