nextcloud

了解和改进Nextcloud预览

下一页CloudPi‘目标受众是家庭托管者,吸引用户的用例之一是自行托管自己的图片集。

这些用户的主要抱怨是画廊太慢。当您打开图库时,预览会实时生成,这会影响响应速度。一旦生成它们,下一次它将加载得更快。

当前的解决方案是使用Cron作业通过cron作业离线生成预览。 预览生成器应用 这样,当我们打开图库时就可以将其提取。

即使使用此应用程序,浏览图片通常也很慢。发生这种情况通常是由于以下原因

  • 缺乏计算能力。单板电脑不是很强大。
  • 预览尺寸配置错误(并且缺少相关文档)。

即使使用预览生成器,在Raspberry Pi上可能要花费数天甚至数周的时间才能为大型集合生成预览,这会使很多人失望。

另一个抱怨是,生成了太多的预览,因此预览文件夹经常占用比图片本身更多的空间。

尝试解决此问题的最明显的结果是注意到这样一个事实,即使我们的系统是多处理器,也仅使用一个CPU来生成预览,因此有大量未利用的可用资源。

首先,让’快速浏览Nextcloud预览系统。

预览如何运作

每次上传图片时,都会生成两个预览

  • 小32×32预览。这是“文件”列表中的图标。
  • 最大预览。这是单击时显示在浏览器中的大图。

最大预览大小默认为4096×4096,并且可以配置

occ config:system:set Preview_max_x--value 2048
occ config:system:set Preview_max_y--value 2048

这产生

root@293626d9121d:/var/www/nextcloud# ls -R data/appdata_ocn7c0nrnm7u/preview/*
data/appdata_ocn7c0nrnm7u/preview/63405:
1365-2048-max.jpg 256-256-crop.jpg

还有其他一些预览不是默认生成的,而是由Nextcloud的其他部分使用的。除非它们是使用App预先生成的,否则它们将是即时生成的。

  • 图库应用程序请求(js / thumbnail.js)
    • 400×200 -> 384×256 / 256×常规缩略图为384(**)。
    • 200×200 -> 256×171 / 171×文件夹缩略图为256,显示目录的前四个方形缩略图。
  • 网格视图模式下的“文件”应用请求(js / filelist.js)
    • 250×250 -> 256×256

(*)要求400×200,但后端将其取整为2的幂-> 384×256.这些仅是示例。

(**)取决于照片方向

预览生成器如何工作

我们可以看到我们需要一个配置正确的预览生成器,否则我们可能会生成无用的预览,因为它们将不被使用。

默认情况下,该应用会生成32种可能的尺寸×32到Max,这既浪费CPU,又浪费空间,因为正如我们刚刚看到的那样,’t be used.

root@293626d9121d:/var/www/nextcloud# ls -R data/appdata_ocn7c0nrnm7u/preview/*
data/appdata_ocn7c0nrnm7u/preview/63405:
1024-1024-crop.jpg 171-256.jpg 256-384.jpg 2731-4096-max.jpg
64-64-crop.jpg 683-1024.jpg 1024-1536.jpg 256-256-crop.jpg 
2731-2731-crop.jpg43-64.jpg 64-96.jpg

如果我们不这样做’为了避免这种行为,该应用程序允许我们配置要生成的大小,但是除非您在代码中进行挖掘,否则在任何地方都没有真正需要什么大小的文档。配置此设置

occ config:app:set预览生成器squareSizes--value="32256"
occ config:app:set预览生成器widthSizes--value="256 384"
occ config:app:set预览生成器heightSizes--value="256"

因此,我们最终要么抱怨抱怨使用的GiB比实际照片更多,要么天真地尝试使用不同的大小,并假定将在最有可能不使用时使用它们。

推荐配置

由于上述原因,我建议对SBC进行以下设置

occ config:app:set预览生成器squareSizes--value="32256"
occ config:app:set预览生成器widthSizes--value="256 384"
occ config:app:set预览生成器heightSizes--value="256"
occ config:system:set Preview_max_x--value 2048
occ config:system:set Preview_max_y--value 2048
occ config:system:set jpeg_quality --value 60
occ config:app:set预览jpeg_quality--value="60"

我认为这些应该是预览生成器应用程序的默认设置。

root@293626d9121d:/var/www/nextcloud# ls -R data/appdata_ocn7c0nrnm7u/preview/*
data/appdata_ocn7c0nrnm7u/preview/63405:
1365-2048-max.jpg  171-256.jpg 256-256-crop.jpg 256-384.jpg  64-64-crop.jpg

正确配置预览生成器可以使速度提高4倍,并节省大量的空间(请参见下面的结果)。

提案

为了尝试找到一种更有效地使用我们的CPU并提高低端设备性能的方法,我分叉Nextcloud和Previews Generator应用程序创建了一个概念验证实施,可以在其中进行一些测试。

我们不’对于小缩略图,可能仅用于最大预览,需要使用计算量大的过滤器,因此需要非常好的质量,因此该提案采用缩放功能而没有插值和并行生成,以尝试获得更好的结果。

使用这些修改,我能够在4核Raspberry Pi上实现5倍的速度提升,而在16核PC上实现10倍的速度提升,同时保持良好的图像质量。

如果与未配置的预览生成器进行比较,则Raspberry Pi的增益是20倍,PC的增益是50倍(请参阅Github链接)。

您可以在下面查看有关这些基准测试结果的更多详细信息 Github.

作者: 纳乔帕克

谦虚地分享我认为有用的东西 [ 的github 码头工人hub ]

48 评论s

  1. “最大预览。这是单击时显示在浏览器中的大图。”
    ==>>您是说播放幻灯片时显示的图片不是实际图片而是生成的图片?
    如果是这样,那将是浪费力量和空间。
    而且我了解为什么在家里使用光纤连接(在Rock 64上)时,显示图像会花费很多时间,’m away.

  2. 让我们希望Rullzer将在官方应用程序中包含这些增强功能。 --

    只是一个想法。运行php-fpm时,服务器会生成多个线程来生成缩略图。仍然非常慢。

  3. 你好,

    我在哪里以及如何更改目录’s进行预览,不是每个目录都应显示为预览,否则此站点中只有2到3个特定目录!谢谢你的帮助

  4. 我不太确定我能理解上面的命令-

    首先,我应该在“预览生成器如何工作”部分还是仅用于说明?
    第二,当我进入FreeNAS nextcloud监狱并尝试运行occ config:app:set Previewgenerator squareSizes时–value=”32 256″我收到一个错误OCC:找不到命令。

    我究竟做错了什么?在此先感谢您的帮助!

    1. 在到Nextcloud监狱的ssh会话中:
      光盘/ usr / local / www / nextcloud
      运行所有命令,例如
      sudo -u www php occ config:app:set Previewgenerator squareSizes –value =“ 32 256”

  5. 谢谢您的精彩帖子。但是,似乎还有另一个错误使Nextcloud变得超级慢:它正在尝试预览mp3-s,而仅需一分钟mp3即可预览。我有一个全新的Nextcloudpi设置(在Raspi 3上),使用webdav上传了带有几个mp3-s的目录,然后使用Nextcloud ios应用访问该目录,而无需单击任何文件。这些行显示在/var/log/apache2/nc-access.log中:

    10.10.11.177– –[2019年7月21日:10:3​​4:34 +0100]“GET /index.php/core/preview.png?file=body%20mind%20soul/bl%20purpose.mp3&x=576&y=768&a=1&mode=cover HTTP/2.0” 404 0 “-” “Mozilla / 5.0(iOS)Nextcloud-iOS / 2.23.7” ~126/126258422~
    10.10.11.177– –[2019年7月21日:10:3​​4:34 +0100]“GET /index.php/core/preview.png?file=body%20mind%20soul/bl%20ml%201of2.mp3&x=576&y=768&a=1&mode=cover HTTP/2.0” 404 0 “-” “Mozilla / 5.0(iOS)Nextcloud-iOS / 2.23.7” ~126/126590957~
    10.10.11.177– –[2019年7月21日:10:3​​4:34 +0100]“GET /index.php/core/preview.png?file=body%20mind%20soul/bl%20med.mp3&x=576&y=768&a=1&mode=cover HTTP/2.0” 404 0 “-” “Mozilla / 5.0(iOS)Nextcloud-iOS / 2.23.7” ~126/126603509~
    10.10.11.177– –[2019年7月21日:10:3​​4:34 +0100]“GET /index.php/core/preview.png?file=body%20mind%20soul/bl%20law%20of%20life.mp3&x=576&y=768&a=1&mode=cover HTTP/2.0” 404 0 “-” “Mozilla / 5.0(iOS)Nextcloud-iOS / 2.23.7” ~126/126610499~

    〜126/126610499〜表示它运行了126秒(准确地说是126610499)

  6. 你好!
    是否可以为.mp4甚至.gif之类的视频生成预览?
    我使用的是nextcloudpi Webpanel中的cronjob,图片在使用rpi 4时确实很流畅。

    在我的画廊中,我有4个装有图片的文件夹。但是应该再有3个包含视频和GIF的文件夹。
    其中一个工作库文件夹有1个gif数据,甚至是预先生成的。我只是不明白为什么其他文件夹不是’t pre generated.

    如果有人可以帮助我,那就太好了,我看到这个网站的评论真的很活跃!

    泰语,祝您有美好的一天!
    朱利安

  7. 很酷!谢谢,将应用设置为此处编写的“reset”预览缓存中,生成了以下文件:
    / preview / 1020200:
    总共444
    drwxrwxr-x 2 www-data www-data 4096年7月24日21:26。
    drwxrwxr-x 13403 www-data www-data 274432 Jul 25 09:03 ..
    -rw-rw-r–1 www-data www-data 128154 7月24日21:26 1080-1920-max.jpg
    -rw-rw-r–1 www-data www-data 6133 Jul 24 21:26 144-256.jpg
    -rw-rw-r–1 www-data www-data 9542 7月24日21:26 256-256-crop.jpg
    -rw-rw-r–1 www-data www-data 14211 Jul 24 21:26 256-455.jpg
    -rw-rw-r–1 www-data www-data 1618 7月24日21:26 64-64-crop.jpg

    OLD预览文件夹更大,并且文件更少:
    预览/ 1020200:
    总计1228
    drwxr-xr-x 2 www-data www-data 4096 2019年1月14日。
    drwxrwxr-x 39159 www-data www-data 933888 7月24日14:00 ..
    -rw-r–r–1 www-data www-data 309785 2019年1月14日1080-1920-max.jpg
    -rw-r–r–1 www-data www-data 1279 2019年1月14日32-32-crop.jpg

  8. 非常感谢您追踪了为什么Nextcloud有时会非常痛苦地减慢SBC的速度’s. SBC’受到约束的硬件确实将揭示出明显的浪费,瓶颈和效率低下的地方。感谢您的所有杰出贡献,NachoParker!

  9. 谢谢,非常有见地!

    我确实注意到在我的Nextcloud(不是NextCloudPi)实例上,1024×对于32个,要求1024个大拇指×文件列表中的32张图像。因此,使用您推荐的设置’仍在创建1024×即时显示1024个大拇指。这可以在某处配置吗?还是NextCloudPi与常规Nextcloud有所不同?在任何情况下,将1024添加到“ squareSizes”设置中,都不会即时创建任何拇指,因此’s great!

  10. 非常感谢。一世 ’ve总是给人一种印象,即使安装了预览生成插件,第一次打开文件夹时nextcloud仍会创建预览。但是我’从来没有时间研究它。

    现在一切都加载得非常顺利!!!

    您是否填写了报告,但报告了不同的图片尺寸?一世’ve只能找到用于并行预览生成的推送请求。由于许多用户会认为预览生成插件可以正确执行所有操作,因此大多数人永远不会想到进一步研究它。

  11. 291/5000
    非常感谢您提供本指南。我的Nextcloud可以在带有Celeron处理器的自制NAS上工作,其中的预览生成需要使用默认设置才能使用。这些设置极大地加快了预览的创建,尤其是从电话或Web访问中检索图像的速度。

  12. 对于nc-previews-auto,它说,“您可以以分钟为单位指定夜间持续时间,或0 ”
    我如何确定每晚什么时间开始该过程?我还有其他备份,需要错开这些工作。

  13. 这已经在github上的nextcloud上滚动了吗?我认为没有人会反对这些变化,所以您可以以某种方式处理它吗?我们所有人都在评论此帖子,我们都在等待您的更改-最好在管理员用户界面中设置用于并行处理的核心号码,这也是最好的选择。

  14. 令人印象深刻的改进!
    这应该是Nextcloud的默认配置的一部分。当前的默认设置使图库在标准PC上也几乎无法使用。

    谢谢!

  15. 优秀的文章!任何人都可以复制这些步骤以合并“预览生成器更改”以自动化的方式?还是必须手动完成?先感谢您,

  16. 你好,
    一直在寻找增加幻灯片图像之间延迟时间的方法。我发现从图库浏览幻灯片时如何做到这一点,但是图像不如照片幻灯片中的图像大。如果我只能合并照片幻灯片和画廊幻灯片的最佳特征,那我会很高兴的(直到下一个难题解决了)。
    谢谢

  17. I’已检查(实际调试过)lib / private / Preview / Generator.php的最后一个稳定的Nextcloud 17.0.2的源,并在calculateSize()方法中找到了以下几行:
    —-
    如果($ height!== $ maxHeight&&$ width!== $ maxWidth){
    / *
    *缩放至最接近的四次方
    * /
    $ pow4height = 4 ** ceil(log($ height)/ log(4));
    $ pow4width = 4 ** ceil(log($ width)/ log(4));

    //最小大小为64
    $ pow4height = max($ pow4height,64);
    $ pow4width = max($ pow4width,64);
    —-

    因此实际上只有4的幂才有意义:64、256、1024、4096
    既然我们不知道’想要4096,因为它’太大,并且由于我的浏览器上的Android应用程序和Web应用程序至少要求256×全页预览中256张图像和1024宽/ 1024高’d建议设置以下内容:

    occ config:app:set预览生成器squareSizes–value=”256 1024″
    occ config:app:set预览生成器widthSizes–value=”256 1024″
    occ config:app:set预览生成器heightSizes–value=”256 1024″

    无论如何,在这些设置中,所有其他尺寸都具有Foure的力量’t make sense

  18. 您好,感谢您为我指出这个话题。
    在Nextcloud 16.x中,我使用此Previewgenerator配置生成与从Nextcloud Files应用程序,Nextcloud Gallery和Android 下一页cloud App本身创建的预览文件完全相同的预览文件:

    occ config:app:set预览生成器squareSizes–value=”256 1024″
    occ config:app:set预览生成器widthSizes–value=”384 2048″
    occ config:app:set预览生成器heightSizes–value=”256 2048″
    occ config:system:set Preview_max_x–value 2048
    occ config:system:set Preview_max_y–value 2048

    最好的祝福,
    塞巴斯蒂安

  19. 有没有一种方法可以只保留某个预览并在生成预览后删除原始文件?场景:各种用户上传他们的图片以共享,但是存储容量有限并且无法观看e。 G。浏览器中的1024px版本完全可以。

  20. 将MariaDB用作默认数据库时,是否有其他方法?

    我希望看到预览仅使用32/64进行图标预览,并跳过所有其他预览。

    如果用户单击以查看完整照片,则应显示原始大小。有谁知道如何实现?

    在我看来,这个预览版问题确实似乎是NC的致命弱点。要在预览生成时浪费额外的10-25%+的存储空间,更不用说创建文件的时间了。

  21. 在“文件”列表中单击图像时,将立即下载图像文件。可以更改此设置,以便打开图像大预览(幻灯片),就像在“照片”中单击图像一样吗?

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *