我正在调试一个在显示博客文章列表时间歇性崩溃(500 错误)的 codeigniter 应用程序。
崩溃发生在 20-30% 的页面重新加载 - 并且似乎与服务器配置错误的内存问题有关。
首先print_r($array); exit;
,我通过在发送到视图页面的每个数组下方执行控制器如果您只是输出数组(不通过视图)就没有问题——永远不会超时。
所以我不认为查询逻辑有问题。当页面正确加载时,CI 的分析器也会显示查询时间 <.001(当它崩溃时,我会收到 500 错误并且无法读取分析器的信息)。
接下来我转到print_r
视图的 HTML,其中包含控制器发送的数组的循环。这就是偶尔会导致 500 错误的瓶颈所在。
该应用程序的设计方式是,单个视图处理控制器发送的所有数组,并构建一个带有最终输出的 HTML 页面。
正因为如此,视图有很多 PHP 逻辑。在运行 foreach 循环、对 post 参数的条件测试、嵌套的 foreach 循环等之前进行若干数组拆分以插入广告单元。
它非常复杂但完全可读。但是我想知道是不是逻辑太多,这个逻辑的负载是否应该分成更小的片段(多个视图),然后合并成一个最终的 HTML 字符串。
视图有
- 30-50
if / elseif
, 部分嵌套 - 6-7
foreach
,一些嵌套 - 5
array_splice
众多empty
且isset
你对这个问题怎么看?您通常会避免逻辑重的视图吗?有什么建议吗?
请注意,我不是为了网页设计师等而在其他 SO 讨论中询问“清理”视图。我的观点是这种结构是否会导致我的超时以及潜在的解决方案是什么。