0

好吧,所以我什至不知道如何开始这样做但基本上我有一个显示在每个页面上的菜单来获取它的文本和来自 mysql 数据库的链接。

这是代码:

<table class="LeftMenuTable">
<?php
    // Generates the left menu from the LeftMenu_items table
    $result = MySqlQuery("SELECT * FROM Menu_LeftMenu;");
    while ($row = mysqli_fetch_assoc($result))
    {
        if ((int)$row['header'] == 0)
        {
            // echos value is on or not
            echo "<tr><td class='LeftMenu'><a href='" . $row['url'] . "'>" . $row['text'] . "</a></td></tr>";
        }
        else if ((int)$row['header'] == 1)
        {
            // header
            echo "<tr><td style='border:0px; height:5px;'></td></tr>";  // adds extra empty tabel
            echo "<tr><td class='LeftMenuHeader'><b><strong>" . $row['text'] . "</strong></b></td></tr>";
        }
    }
?>
</table>

function MySqlQuery($Query)
{

    $result = $mysqli->query($Query) or die(ReportMysqlError(mysqli_error($mysqli), $Query));
    return $result;
}

我觉得任何可以被 html 缓存替换的 sql 查询都会以某种方式降低网站的速度。

如果有人有任何信息或建议,非常感谢。

4

3 回答 3

0

在调用数据库的方法中(获取菜单项并构建相应的 html):

  1. $_SESSION用你的菜单的 html检查当前是否有一个项目。
  2. 如果 (1) 什么都不返回,则执行查询,构建 html 并将结果存储在$_SESSION.
  3. 返回菜单的 html。

可以在此处找到有关如何使用会话的更多信息。

这样,您的菜单查询只会在once每个会话中触发。我怀疑这是一个真正的性能破坏者(如果您的查询或多或少是正常形式)。

请注意,changes在使用上述机制的会话到期之前,您的菜单中不会自动获取。

于 2012-06-17T10:44:07.737 回答
0

当我需要组织一个缓存层时,我通常使用memcached(或其他类似的解决方案)。

但在您的情况下,可能会以更简单的方式完成:使用中间“生成器”脚本,每次更新相关表时都会触发该脚本(因为它是从某种形式的管理面板更新的,对吗?)并将生成一个静态文件,然后将此文件包含在您的主视图脚本中。

于 2012-06-17T10:44:31.463 回答
0

如果你足够热心,我会建议一种稍微不同的方法。

如果您使用称为“Smarty”的模板语言制作页面,请在此处了解更多信息。http://smarty.net你应该会发现 smarty 会为你管理缓存。

这与您的问题有什么关系。

  1. 它将使您的 Web 开发更容易,因为您将停止将内容“回显”到您的 HTML 中。
  2. Smarty 会为你做缓存。当 smarty 模板加载时,smarty 会保留一份副本(或者您可以告诉它缓存文件 x 小时、天等)。
  3. 随着您网站的增长,smartys 缓存将有助于保持您的网站快速运行和加载。
  4. 您只需很少的工作即可使缓存工作,只需使用 smarty 模板来构建您的站点。
  5. 最后,您可能会发现使用 smarty 构建网站要简单得多。

约翰。

于 2012-06-17T10:56:13.110 回答