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

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毫秒加载完主页。

optipng

压缩图片后,主页负载测试结果如下,平均花费4814毫秒加载完主页,降低了将近1秒半。

optipng

图片的格式最好是选择jpg,png图片的体积往往比jpg图片要大。

为这篇文章评分
[Total: 0 Average: 0]

Leave a Reply

Your email address will not be published.

The maximum upload file size: 2 MB. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, code, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here