我正在显示一个动态表,最终看起来像这样:
它基本上允许我管理我的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()
并没有表明......?
我怎样才能找出为什么这么慢,找到瓶颈?如何加快页面加载速度?