使用PHP我正在呈现一个看起来像这样的HTML表:
--------------------------------------------------
| title | description | actions |
-------------------------------------------------|
| title1 | desc1 | edit / delete |
| title2 | desc2 | edit / delete |
| title3 | desc3 | edit / delete |
| title4 | desc4 | edit / delete |
--------------------------------------------------
代码就像这样(在本次考试中,精简版本没有thead
,tbody
等):
<table>
<?php foreach ( $tableData as $row ): ?>
<tr>
<!-- Render columns (title, description)
<?php foreach ( $columnData as $column ): ?>
<td>
<?= $row[$column['name']]; ?>
</td>
<?php endforeach; ?>
<!-- Render actions -->
<?php foreach ( $actions as $action ): ?>
<td>
<?= include($action); // include the proper action button! ?>
</td>
<? endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
这给了我想要的结果。但我只有一个问题。当我有1000多条记录时,它会变得有点慢。我已经注意到这是因为我正在为每个表行做include
。当我删除include
时,一切都运行得非常快。
included
文件包含一些PHP逻辑。所以我不能只做file_get_contents
。好吧,我可以,但后来我必须使用eval()
来解析内容。但我宁愿根本不使用这个功能。
所以现在我想知道是否有可能以某种方式缓存包含的文件?那么PHP不是必须反复包含实际文件,而是从缓存中获取它?这样的事情可能吗?
还是有更好的选择吗?
答案 0 :(得分:1)
您可以将所有操作(功能)放在一个文件中并包含该文件一次。在循环中,您将根据其名称调用不同的函数。 Variable function example
答案 1 :(得分:0)
当您在转到该页面时进行编辑或删除时,每次再次打开表时,表格似乎都会发生变化(几乎......),因此缓存可能不是最佳选择。
另一种方法是使用分页并添加“全部显示”按钮,这样只有在您真正需要时才会生成完整的表。
答案 2 :(得分:0)
您的动作渲染器看起来有问题 他们只是不能放在单独的文件中。 要渲染一个简单的超链接,模板中只需要一行HTML代码 如果这些渲染器中有太多逻辑,则必须将其移至业务逻辑部分。
分页也肯定有帮助。我的意思是真正的分页,每次调用只处理100条记录,而不是全部1000条记录,其中900条是隐藏的。
答案 3 :(得分:0)
一种选择是走“模板”路线。从文件中删除所有PHP,并用“标记”替换数据部分。然后加载文件一次(file_get_contents)并用数据替换标记。
//template.html
Replace this template {variable} with {search} and {replace}.
{conditional_html}
//template.php
$tpl = file_get_contents('template.html');
$output = '';
foreach($record as $r) {
$data = array('{variable}'=>$r['field1'],
'{search}'=>$r['field2'],
'{replace}'=>$r['field3'],
'{contional_html}'=>($r['field4']='1A' ? 'Display Conditional' : '') };
$output .= str_replace(array_keys($data), $data, $tpl);
}
这将消除文件访问,但您正在创建自己的模板标记语言。理想情况下,您的业务逻辑与显示/呈现分开。
答案 4 :(得分:-1)
include_once()可能就是你要找的东西。这是一个链接: http://php.net/manual/en/function.include-once.php