重构后PHP脚本变慢 - 但是microtime说没关系

时间:2014-07-21 01:11:40

标签: php performance templates

我正在显示一个动态表,最终看起来像这样: table preview

它基本上允许我管理我的mySQL字段,以便从网站上进行编辑。

模型文件使用一个查询加载db值,并将数组传递给视图。

视图然后将所有内容编译成表格。

以前视图文件已将所有html标记硬编码到其中,现在我已切换到每个标记为模板文件的位置,通过this kind of template class生成。

所以我使用一个带有2个嵌套for循环的文件创建了这个表(对于每一行,对于行中的每个字段)来做一个额外的层,总是调用我的模板类。

例如:

OLD

view.php:

$table_row[$index][] = '<td><input type="text" name="'.$fieldname.'"value="'.htmlspecialchars($value).'"></td>';
$last_row[] = '<td><input type="text" name="'.$fieldname.'"></td>';

input_tag_template.php:

<input type="{@TYPE}" name="{@NAME}" value="{@VALUE}"{@ADDTL_ATTR}></input>

view.php:

$tpl_input_tag->set("NAME", $fieldname);
$tpl_input_tag->set("TYPE", 'text');
$tpl_input_tag->set("VALUE", htmlspecialchars($value));

$tpl_td_tag->set("INNER_HTML", $tpl_input_tag->output());
$table_row[$index][] = $tpl_td_tag->output();
$tpl_input_tag->set("VALUE", '');   
$tpl_td_tag->set("INNER_HTML", $tpl_input_tag->output());
$last_row[] = $tpl_td_tag->output();

可以看到视图的完整代码here.

此更改现在导致页面加载10到20秒,与之前的2-3秒MAX相比。有时我甚至会收到一条错误消息,超过30秒后它会超时。

我意识到我正在对模板类进行100多次调用,每次调用都涉及file_get_contents()str_replace(),所以我一开始就尝试调用microtime()我的整个剧本,然后,然后显示差异,它说0.568397。对我来说似乎不是太极端了吗?

如果我回到旧的,不太灵活的版本,它加载就好了。

遇到这个问题,我意识到这可能不是使用模板类的最佳方式(每个标签制作一个模板),可能有点矫枉过正 - 不用说让我的代码更长,更难理解。也许我应该降低灵活性并增加使用的视图/模板文件的数量。

除此之外,我不明白为什么它突然需要更长时间才能加载,但是microtime()并没有表明......?

我怎样才能找出为什么这么慢,找到瓶颈?如何加快页面加载速度?

0 个答案:

没有答案