我正在使用PHP中的图像生成脚本,并使其以两种方式工作。一种方法是缓慢但使用有限的内存,第二种方法更快,但使用6倍的内存。两个脚本都没有泄漏(据我所知)。
在有限的基准测试中,以下是他们的表现:
-------------------------------------------- METHOD | TOTAL TIME | PEAK MEMORY | IMAGES -------------------------------------------- One | 65.626 | 540,036 | 200 Two | 20.207 | 3,269,600 | 200 --------------------------------------------
这是以前数字的平均值(如果你不想自己做数学运算):
-------------------------------------------- METHOD | TOTAL TIME | PEAK MEMORY | IMAGES -------------------------------------------- One | 0.328 | 540,036 | 1 Two | 0.101 | 3,269,600 | 1 --------------------------------------------
我应该使用哪种方法?为什么?
我预计这会被大量用户使用,每个用户在正常访问期间向此脚本发出10-20个请求。
我倾向于使用更快的方法,因为虽然它使用了更多的内存,但它只有1/3的时间并且会减少并发请求的数量。
更新:我能够优化第二个选项并提出第三个选项,将内存使用量减少一半。一个接一个地运行新数字,这是新的基准:
-------------------------------------------- METHOD | TOTAL TIME | PEAK MEMORY | IMAGES -------------------------------------------- One | 51.901 | 798,900 | 200 Two | 12.039 | 3,269,600 | 200 Three | 13.667 | 1,815,624 | 200 --------------------------------------------
感谢您的指导和帮助!
答案 0 :(得分:2)
我会选择第二个。它更快,对最终用户来说总是好的。但是,公羊的使用率很高,所以你必须权衡额外公羊的价格。将ram添加到服务器比添加整个新框更容易(也更便宜)。
另一方面,你有没有对这两个进行分析?我相信你可以到达某种快乐的中间地带。类似于第二个算法的速度,但第一个算法的内存使用量。在做出决定之前,请通过xdebug运行它。
答案 1 :(得分:2)
我认为这取决于你有多少可用内存。假设这些数字以字节为单位,那么即使是“更多内存”版本仍然只“使用3MB内存”。更多内存版本将继续更快,直到未完成的请求数量推动内存系统进行交换,此时,它将显着变慢......
答案 2 :(得分:0)
我读到你关于你如何做快速版本的评论,你可以使用像memcached这样的东西,所以你只需要将你的数组内容放在内存中一次。然后额外的内存使用几乎不重要。