【问题标题】:Script Speed vs Memory Usage脚本速度与内存使用情况
【发布时间】:2011-01-29 17:44:27
【问题描述】:

我正在用 PHP 编写一个图像生成脚本,并以两种方式工作。一种方法很慢,但使用的内存量有限,第二种方法要快得多,但使用 6 倍的内存。两个脚本都没有泄漏(据我所知)。

在有限的基准测试中,它们的表现如下:

------------------------------------------ 方法 |总时间 |峰值内存 |图片 ------------------------------------------ 一 | 65.626 | 540,036 | 200 二 | 20.207 | 3,269,600 | 200 ------------------------------------------

这是之前数字的平均值(如果您不想自己计算):

------------------------------------------ 方法 |总时间 |峰值内存 |图片 ------------------------------------------ 一 | 0.328 | 540,036 | 1 二 | 0.101 | 3,269,600 | 1 ------------------------------------------

我应该使用哪种方法以及为什么?

我预计会有大量用户使用此脚本,每个用户在正常访问期间会对该脚本发出 10-20 次请求。

我倾向于更快的方法,因为虽然它使用更多内存,但它只占用了 1/3 的时间,并且会减少并发请求的数量。

更新:我能够改进第二个选项并提出第三个选项,将内存使用量几乎减少了一半。一个接一个地运行新的数字,这就是新的基准:

------------------------------------------ 方法 |总时间 |峰值内存 |图片 ------------------------------------------ 一 | 51.901 | 798,900 | 200 二 | 12.039 | 3,269,600 | 200 三 | 13.667 | 1,815,624 | 200 ------------------------------------------

感谢您的指导和帮助!

【问题讨论】:

  • 为什么不让它成为后台进程?
  • @Col。弹片——嗯,通常一次只创建一个,它需要被实时预览页面引用。所以它必须根据要求生成。 (当第二次请求确切的图像时,我还将使用缓存)。

标签: php optimization memory performance


【解决方案1】:

我会选择第二个。它更快,这对最终用户总是有好处的。但是,内存使用率很高,因此您必须权衡额外内存的价格。将 ram 添加到服务器比添加一个全新的盒子更容易(也更便宜)。

另一方面,您是否对这两个方面进行了分析?我相信你可以达到某种快乐的中间地带。类似于第二种算法的速度,但第一种算法的内存使用量。在你做出决定之前通过 xdebug 运行它。

【讨论】:

  • @ryeguy 第一种方法从掩码图像中的每个像素复制 alpha 信息,并将其绘制在新创建的图像上。第二,使用x,y,alpha 值(7000~)的预处理数组并从中绘制新图像。没有很多方法可以优化数组的加载,这会耗尽内存。我试图避免在服务器(或其任何变体)上使用 ImageMagick。
【解决方案2】:

我认为这取决于您有多少可用内存。假设这些数字以字节为单位,那么即使“更多内存”版本仍然“仅”使用 3MB 内存。更多内存版本将继续更快,直到未完成的请求数量将内存系统推入交换状态,此时它会显着变慢......

【讨论】:

    【解决方案3】:

    我阅读了您关于如何使用快速版本的评论,您可以使用 memcached 之类的东西,因此您只需将您的数组存储在内存中一次。那么额外的内存使用就无关紧要了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多