Nextcloud 20 使用笔记 - 略缩图功能优化

2021年1月1日

  本篇用于记录在 Nextcloud 20.0.4 使用过程中对略缩图功能的理解,本想放在上一篇里面作为优化的一部分,但发现描述起来文字很多,就新开一篇吧。

  Nextcloud 的略缩图生成方式和别的程序不同,在默认情况下,Nextcloud 会给一张图片生成多张不同分辨率的略缩图,在用户使用不同设备浏览的时候,根据用户设备屏幕的大小发送匹配屏幕大小的略缩图,详见管理员手册-Previews configuration

  这样带来的好处是用户平时能以更快的速度看到略缩图,因为 Nextcloud 只用把对应用户设备屏幕分辨率的略缩图文件直接传送给用户就可以。但是缺点也很明显,第一次浏览图片时生成略缩图的过程会占用大量的系统资源,如果服务器性能比较低,就会导致 Nextcloud 出现严重卡顿。

  此外,如果图片文件足够大,那么在默认配置下生成的略缩图甚至可能会达到 4K 分辨率,也就是说不仅占用大量资源生成略缩图,而且会出现略缩图占用的空间大小是源图片文件本身的两倍甚至更多的情况出现(因为一张图会对应很多张不同分辨率的略缩图)。

  针对这种情况,个人尝试过三种解决方法

解决方法1:关闭略缩图功能

  在关闭略缩图功能后,网页端浏览图片时就不会显示图片略缩图了,想知道图片内容只能点击图片加载原图,或者结合文件名在脑内回忆,体验很不好。关闭略缩图的方法为在 Nextcloud 目录下的 /config/config.php 中添加以下配置保存即可:

'enable_previews' => false,

解决方法2:设置允许生成的最大略缩图分辨率

  这个方法限制了最大略缩图分辨率,从而提高了略缩图的生成速度,配置方法为在 Nextcloud 目录下的 /config/config.php 中添加以下配置保存即可

'preview_max_x' => 1920,
'preview_max_y' => 1920,

  将 null 改成对应的分辨率数值,第一排是宽,第二排是高(数值根据自己需求设置)。在开启略缩图功能的情况下,在网页双击点开图片全屏查看的也是略缩图(而非原图,不清楚是因为 Nextcloud 在预览时只传送略缩图,还是因为屏幕不够大不足以让 Nextcloud 达到传送原图的条件),所以此处数值不宜设置的太小,设置的太小会导致想在网页端双击想查看大图时出现的却是一个很小略缩图。

解决方法3:使用 Preview Generator 插件

  Preview Generator 插件允许管理员在没有查看图片的情况下提前生成图片的预览图片文件,还可以设置任务每隔一定的时间自动扫描并生成新增图片的略缩图,使用方法如下:

  先在 Nextcloud 的应用中心找到 Preview Generator 插件安装启用,然后打开 ssh,切换到 Nextcloud 目录下,首先设置好 Preview Generator 插件生成的略缩图大小(此设置非必要,按照个人需求决定即可,此命令意思为使 Preview Generator 生成的略缩图宽度为:64、128 和 1024,可自行调整,具体说明见 Preview Generator的GitHub

sudo -u www php occ config:app:set --value="64 128 1024" previewgenerator widthSizes

  然后执行以下命令生成全部略缩图

sudo -u www php occ preview:generate-all -vvv

  如果图片文件较多,建议使用 screen 进行此操作(screen 可以在断开 ssh 的情况下继续执行命令)。如果只需要生成特定用户的略缩图文件,那就在命令后面加上用户名

sudo -u www php occ preview:generate-all -vvv [uesrid]

  生成了现有图片的略缩图后,添加 cron 任务,定时扫描新增的文件并生成略缩图(路径修改为自己的 Nextcloud 所在路径)

crontab -e -u www
*/10 * * * * sudo -u www php /nextcloud/occ preview:generate-all

  以上三种方式各有优势,根据自己的需求设置即可。


最后说下怎么删除略缩图

  所有用户的略缩图文件都位于:网站目录 /data/appdata_*/preview/

  先删除 preview 文件夹,然后到命令行终端切换到 Nextcloud 目录下执行

sudo -u www php occ files:scan-app-data

  此命令用于扫描指定目录的文件,如果不执行这条命令而只是删除 preview 文件夹,那 Nextcloud 就会认为删掉的那些略缩图仍然存在。关于 OCC 命令的详细解释可以查看管理员手册-Using the occ command