【问题标题】:Best way to save PNG images for fast loading保存PNG图像以快速加载的最佳方法
【发布时间】:2013-08-10 18:37:39
【问题描述】:

我有一些 PHP 代码可以处理大量 .PNG 图像,将它们逐个像素地组合在一起(所以有很多 ìmagecolorat 调用)。其中一些图像可能会发生变化,但有一些是预先计算好的,很少发生变化。

预计算的图像由 GD 生成,并在 PHP 中使用imagepng 输出。

由于它们的阅读频率远高于编写频率,因此我想优化它们以提高阅读速度。

但是imagepng 的哪种质量设置最能优化imagecreatefrompng 中的读取性能?

更高的压缩率和过滤器会创建更小的文件,但也许没有压缩或过滤器的更大文件读取速度更快?

也许最好完全跳过 PNG 文件并使用原始的、未压缩的二进制文件或可以读入 PHP 数组的东西?

【问题讨论】:

  • 我认为差异很小...我建议您创建临时脚本并测量时间。否则,您需要找到其他解决方案,例如使用比 PHP 更快的其他语言
  • 我想您知道您可以使用imagecopy*() 函数复制整个图像或部分图像。使用图像魔法也应该会产生更好的性能,因为所有像素的东西都是用 C 编码的。但这取决于你对像素的实际操作。
  • 额外的压缩级别可能会占用少量额外的 CPU 时间,但您必须平衡它与系统其余部分的开销。例如也许你节省了 5% 的磁盘带宽,但多消耗了 50% 的 CPU。没有办法正确回答这个问题:对各种方法进行基准测试,看看哪种方法最适合您。
  • GD 库始终在内存中保存未压缩的图像数据。压缩和解压缩图像数据应该只占 CPU 时间的一小部分,但您始终可以将图像保存为 GD 原生格式。
  • 如预期的那样。您只能优化“像素推送”本身,但尚未发布任何细节。

标签: php performance png gd


【解决方案1】:

如果您一遍又一遍地处理几乎相同的文件,您可能希望停止弄乱 imagepng 本身并将逻辑上移一级。例如,您可以缓存完成的图像或函数调用(例如参见 Caching function results in PHP )。

【讨论】:

  • 感谢您的建议,我已经为结果实现了磁盘缓存。结果缓存不会影响处理时间本身,但它只会节省重复调用的时间。
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2022-06-25
  • 2017-08-12
相关资源
最近更新 更多