【发布时间】:2021-10-05 23:37:34
【问题描述】:
在我的项目中,我正在计算太阳能电池板的角度,对于 1 度到 90 度之间的每个角度,计算的细节是每年每 6 分钟一次。
因此,每个角度 90、每个月 12、每个月 30 和每天 6 分钟都会有讨厌的嵌套循环(240 个循环)。
90 x 12 x 30 x 240 = 7.776.000
即使在我的本地主机中进行了超过 700 万次的计算,也需要整整 20 秒才能完成。当我将项目上传到托管服务器时出现问题,它总是在 2-3 分钟未完成的过程后超时。
你们有什么建议可以解决这种问题吗?
代码或多或少是这样的:
for(i = 0; i < 90; i++){
for(m = 0; m < 12; m++){
for(d = 0; d < 30; d++){
for(t = 0; t < 240; t++){
//some math calculation like sin cos pow etc
}
}
}
}
【问题讨论】:
-
计算取决于什么,太阳能电池板所在的物体的位置,太阳?你能详细说明一下吗?
-
也许您的计算本身可以优化。
-
为了获得更高的性能,您可能希望用 c++ 编写它并使用
exec来运行它。如果函数是纯函数,缓存也是可能的。 -
我建议使用 astro。您可以从 github.com/derickr/astro 克隆扩展程序
-
如果您想运行一次,请使用作业并将值存储在数据库中以保存常用值。否则,如果您想在运行时执行此操作,我认为仅针对当前日期或时间进行计算会更优化。
标签: php laravel nested-loops