【问题标题】:Possible to speed up image loading in php/imagick可以加快 php/imagick 中的图像加载速度
【发布时间】:2015-12-03 15:27:33
【问题描述】:

我注意到在 php 中将图像加载到 imagick ($im = new Imagick($sFilename);) 需要 0.6 秒才能获得 8MB 图像。这对我来说似乎有点慢,所以我尝试了一个测试并使用file_get_contents 读取文件。大约 0.005 秒。更好的。有点太好了,我猜那里有一些缓存?

但我可以将同一个文件加载到 imagick 中十几次,而且总是 ~0.6 秒。

我可以告诉 file_get_contents 以某种方式绕过系统缓存,以便更好地了解从我的硬盘中检索 8MB 文件的原始速度吗?

有什么办法可以加快 imagick 的速度吗?或者这个操作0.6秒是完全正常的吗?

服务器在 RAID 1 中有两个 7200rpm HP sata 驱动器。

谢谢。

【问题讨论】:

  • 我认为 Imagick 速度较慢的原因是因为它在加载图像时会进行一些解析。解析 8MB 的数据需要一些时间。
  • 不是文件读取需要很长时间,而是将8MB的图像解码为位图,可能非常大。
  • 我确实想知道,但这似乎需要很长时间。有什么可以配置给imagick更多资源的吗?将其设置为“高优先级”CPU任务还是什么?或者启用多核处理等?
  • 图片的类型是什么 - JPG? PNG?图像的尺寸(以像素为单位)是多少?您实际上想要实现什么 - 快速处理一张图像,或者在短时间内处理大量图像?你在 Windows 上吗?
  • JPG,6000x4000,CentOS 6.7,至强 E5-1650,32GB RAM。两者都有 - 有时是一张图片,有时是数千张。

标签: php imagemagick imagick


【解决方案1】:

有什么办法可以加快 imagick 的速度吗?

购买更快的 CPU

或者这个操作0.6秒是完全正常的吗?

是的。

这对我来说似乎有点慢

但这似乎需要很长时间。

我猜那里有一些缓存?

您只是在猜测某些东西应该更快......并且您将它与完全不同的操作进行比较。 file_get_contents 只是从磁盘读取文件中的字节。从 JPG 创建图像意味着计算机必须从磁盘读取字节,然后从压缩数据中将它们解码为实际的图像数据。

如果您想查看在压缩过程中需要完成多少工作,您可以通过以未压缩格式写出图像来轻松查看,例如

$imagick = new Imagick("./testImage.jpg");
$imagick->setImageFormat('BMP');
$imagick->writeImage("./output.bmp");

是的,这比处理 HTTP 请求的合理时间要长。这也是为什么不在网络服务器中运行 Imagick 是个好主意的另一个原因,而是将其作为后台任务运行。

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 2016-11-20
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    相关资源
    最近更新 更多