繁体   English   中英

从MySQL查询缓存HTML

[英]Caching html from mysql query

好的,所以我什至不知道如何开始执行此操作,但是基本上,我有一个显示在每个页面上的菜单之一来获取它的文本和来自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查询都在降低网站的速度。

如果有人有任何信息或建议,请多多包涵。

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

  1. 使用菜单的html检查当前$_SESSION是否有项目。
  2. 如果(1)不返回任何内容,则执行查询,构建html并将结果存储在$_SESSION
  3. 返回菜单的html。

这里可以找到有关如何使用会话的更多信息。

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

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

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

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

如果您足够敏锐,我建议您使用一种稍微不同的方法。

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

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

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

约翰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM