缓存包含或需要的文件,以便它可以反复使用?

时间:2013-02-09 12:57:34

标签: php include require

使用PHP我正在呈现一个看起来像这样的HTML表:

--------------------------------------------------
| title    | description         | actions       |
-------------------------------------------------|
| title1   | desc1               | edit / delete |
| title2   | desc2               | edit / delete |
| title3   | desc3               | edit / delete |
| title4   | desc4               | edit / delete |
--------------------------------------------------

代码就像这样(在本次考试中,精简版本没有theadtbody等):

<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不是必须反复包含实际文件,而是从缓存中获取它?这样的事情可能吗?

还是有更好的选择吗?

5 个答案:

答案 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