Debian VPS使用optipng和jpegoptim自动压缩网站图片
读者会发现,我的网站上有很多图片。有句话叫做“一张图胜过一千句话”。图片对于技术类文章尤其重要,对读者理解文章的内容有很大的帮助。但是JPG和PNG这些图片文件体积大,不仅会对服务器处理请求产生额外的压力,也会延长网页从服务器传送到用户所花的时间。在这篇文章中,我将介绍如何在Debian VPS下使用命令行压缩图片以提高网页加载速度,然后将命令行写成一个cron任务,以实现每天自动压缩图片。
安装optipng和jpegoptim来压缩图片
我们可以用optipng和jpegoptim来分别压缩PNG和JPEG文件。大多数Linux发行版的软件库中都有这两个软件。在Debian服务器上输入下面的命令安装:
sudo apt-get install optipng jpegoptim
安装好后,切换到网站根目录,如:
cd /var/www/html/
然后执行下面的两条命令在网站根目录下面分别查找PNG和JPEG文件,然后压缩。
find . -iname '*.png' -print0 | xargs -0 optipng -o7 -preserve find . -iname '*.jpg' -print0 | xargs -0 jpegoptim --max=90 --strip-all --preserve --totals --all-progressive
如果执行上面两条命令出现如下错误:
can't back up the existing output file
那么我们需要先将当前用户加入到www-data用户组中,执行下面两条命令,将username更改成你的用户名
sudo usermod -a -G www-data username newgrp www-data
在下图中可以看到,有些图片的大小压缩了46.63%,效果非常明显。
optipng和jpegoptim都是无损压缩的,所以图片大小虽然减少了,但图片的外观质量并没有下降。另外jpegoptim提供了有损压缩的选项,在上面的命令中,–max=90这个选项表示图片质量为原图的90%。这样虽然图片质量有所下降,但压缩率会更高,而且用户感觉不出图片的质量下降。–strip-all选项会将所有的元数据(metadata)删除,包括Exif数据。对于网站来说,JPEG的元数据并没有什么用处。
创建一个cron任务
执行命令
sudo crontab -e
这将打开root用户的cron文件,将下面的命令添加到cron文件中
# optimize images 10 4 * * * echo `date` >> /root/optipng.log && find /var/www/ -mtime -2 -iname '*.png' -print0 | xargs -0 optipng -o7 -log /root/optipng.log -preserve && echo `date` >> /root/jpegoptim.log && find /var/www/ -mtime -2 -iname '*.jpg' -print0 | xargs -0 jpegoptim --max=90 --preserve --totals --all-progressive >> /root/jpegoptim.log
这样服务器在每天凌晨4点过10分就会自动执行optipng和jpegoptim的命令来压缩图片。
Apache JMeter性能测试对比
Apache JMeter是一个优秀的性能测试工具,点击此链接学习如何使用Apache JMeter来测试web服务器性能。
压缩图片前,主页负载测试结果如下,平均花费6276毫秒加载完主页。
压缩图片后,主页负载测试结果如下,平均花费4814毫秒加载完主页,降低了将近1秒半。
图片的格式最好是选择jpg,png图片的体积往往比jpg图片要大。