天天看点

网站性能优化:动态缩略图技术实现思路

  在网站开发过程中,大家都是如何解决多尺寸图片缩略图问题的呢?犹为典型的是电商网站,据了解,淘宝的图片缩略图是直接存储多张缩略图的方式,以满足各种情况下使用,因为它有牛逼的开源+自主开发的海量图片存储架构作支撑。但是,我们在做网站时,并不可能直接搬牛逼的架构过来,就可以达到预期的效果,况且各种成本投入也是有限的。所以一般性能优化的原则大都是这样:先考虑软件的优化,再考虑硬件的升级,当然土豪客户则除外。

  很多网站可能没有对图片进行缩略图处理,上传时图片可能几百kb,在页面也是直接加载几百kb的图片大小,这样极为占用带宽,影响网站加载速度。也有很多网站的做法可能也是直接根据前端页面所需求图片的尺寸,在上传时就处理生成相应尺寸的缩略图,但如果前端页面布局进行调整时,可能就得调整缩略图生成的尺寸,之前生成的图片也有可能需要重新生成。之前我在一个网站项目时就遇到这样的问题,经过一系列地验证,最终是采用动态缩略图技术解决的,现在整理出来给大家分享分享。

  其实,原理很简单,通过高性能的图片压缩算法,在一般处理程序(httphandler)对图片进行压缩处理,图片路径则直接指向httphandler,将图片路径、需要压缩的宽高等参数传进去,实现动态压缩。

  在网站目录下新建 resizeimage.ashx 文件,代码如下:

   图片压缩算法中,有几个参数可以根据自己的需求进行调整,比如:smoothingmode、interpolationmode、encoder.quality,反正图片的大小与图片质量成正比,也跟性能成反比,具体参数用法,请移步msdn查看,因此大家根据实际需求进行取舍了。

  在页面需要调用地方,将img的src设置为resizeimage.ashx,这跟图片验证码处理方式一样,如:

  1 <img runat="server"

src="~/resizeimage.ashx?src=/upload/20140428/www_ideek_cn.jpg&width=128&height=128"

/> 

  这样,一张图片可以在网站任意地方使用,图片经过压缩后传输,通过google或firefox浏览器开发者工具可以很明显地看出图片大小效果和加载速度都有非常明显的提升。

  当然,可能很多人会问频繁的计算对服务器会产生性能影响,所以在实际使用过程中,可以根据自己的需求采用一些手段进行规避,比如引入缓存机制等,这些优化将会在后续文章中讲解。