编者按:[大房说]是七牛云众多用户中的一员,在回顾自己多年项目经历的过程中,他发现越来越多的人已经很依赖云服务所带来的便捷及高效。于是有了“云思路系列”,旨在总结[大房说]在使用云服务过程中得一些经验和教训。
本文转载自[大房说]“云思路系列”第三篇,微信号fangtalk!
- 在列表等页面,针对图片地址,加上?imageView2/3/w/200/h/100/q/90,这样,在列表页,会对用户上传的图片,在列表页上按照 宽200px、高100px、质量为原图的90%进行展示;
- 在产品的详情页,针对图片地址,加上?imageView2/2/w/600/q/95,这样,在详情页面,会对用户上传的图片,按照宽最多为600px、高自适应、质量95%进行展示;
采用这种方式,相比几年前我们在做视频UGC网站和第一财经网站时,自己做图片的方案设计,哪怕抛开分布式的图片上传和传统CDN的分发,应用程序层面的集成也简单了很多,至少不需要保存对同一图片的多种格式的引用:
- 列表页做好缩略图截图,保存一份地址;
- 详情页,做好尺寸压缩,再保存一份地址;
- 如果以后其他页面或者模块,也需要其他格式和尺寸的图片,我们需要针对所有上传的原图,再需要统统重新生成一份新的尺寸图片。量大的时候要处理非常长的时间才能上线;
- 如果随着产品版本的升级,适配多种屏幕,包括高清、Mobile等等,每次尺寸的变动,都需要开发的支持,对不何要求的图片统统进行一次性的处理;
图片这种实时的图片处理服务,是我们抛开传统的CDN而选择“新一代CDN”的一个主要原因。
前几天和一个朋友公司的架构师聊天,聊到了拥抱云所带给我们的一些变化,也顺便聊到了七牛的图片处理。在我聊完我们集成七牛云的方案后,对方的架构师问我,实时的处理,我们发现访问量大的时候,图片加载的有点慢(朋友公司也算是七牛的重度用户,每个月给七牛交很多很多银子),你们没遇到过吗?
我的第一反应是,惊讶。不是说对方质疑云图片慢而惊讶(世上本没有银弹),而是,一年上百万给七牛交银子的团队,竟然在这些基础的数据处理服务之外,没用过七牛的“神级优化”。
给他上一课的同时,我也意识到,看来,很多团队并不认真的看服务商的文档啊。开发人员,往往找到满足自己需求的技术说明,就停止了,集成进来,大功告成。这本身不是我的习惯,在真正开始动手写代码或者做方案之前,我都会通读所有的文档,有一个整体的认识,再说怎么用。这个习惯,也是我可以发现很多好用的用法的终极法宝。
这也是我写文介绍七牛这个服务的原因,一是如果你们没用过这些功能,大家应该去用,如果你不是用的七牛云,你的服务商或许也有类似的功能,天下服务一大抄吗;二呢,鼓励大家多看文档,外加浏览完没有文档的管理页面,看全、思考,再动手,或许这个习惯可以带给你神级开发效率呢。
我们回到前面的问题。实时处理,会慢吗?当然会,虽然七牛进行了缓存,但是,第一次的动态处理,不管是I/O还是CPU,都会有不小的消耗,相比静态文件,自然会慢一点。所以,你可能自然而然的一个想法便是:实时处理完后永久的持久化?但是,这种图片地址[http://7xp4qu.com2.z0.glb.qiniucdn.com/STglr2%2Favatar%2F0.jpg?imageView2/3/w/200/h/100/q/90]怎么做持久化呢?
大家可能觉得,URL里面有了问号,很多浏览器都会当成动态请求,浏览器 或者 客户端缓存的效果没那么好,外加,如果带问号的文件名,显的也很龌龊。那,基于我们多年动态请求伪静态化的经验,可以适用到七牛的动态图片处理方案上来吗?
有了思路,再仔细研究七牛的技术文档,以及七牛的portal,很快就会有方案。
第一步,通过七牛的管理平台,开启数据处理功能: