1

我有一个基于 php 的网站。我使用 switch case 来包含不同的页面并进行导航。我采用了一种方法,使我的索引页面包含导航栏和页脚

我的问题是,每次我从一个页面导航到另一个页面时,都会再次加载所有内容并使网站变得沉重。

<?php include('models/header.php'); ?>
<div id="content">
<center>

<div id="switch" align="center">

<?php
switch($view)
{
case 'Index':
    include('pages/index.php');
    break;

case 'Services':
    include('pages/Services.php');
    break;

case 'About':
    include('pages/about.php');
    break;

case 'Contact':
    include('pages/contact.php');
    break;

case 'Download':
    include('pages/download.php');
    break;

default:
    include('pages/error.php');
}
?>
</div>
</div>
</center>
<br>
<?php include('models/footer.php'); ?>
</div>

有没有办法我可以设置它,以便这些元素被预加载一次并留在缓存中,这样每次我导航到新页面时都不需要加载它们......?

4

3 回答 3

3

鉴于您的代码,您实际上不需要缓存任何内容,这样做可能会导致实际需要的更多开销。

缓存或不缓存,您仍然需要访问一个文件,您将获得操作码生成。但是 PHP 仍然需要访问文件系统,除非您使用带有RAMFS的memcached解决方案,您不会注意到真正的变化。

但是,您确实需要缓存您的代码,出于显而易见的原因,您应该查看APC,它是 PHP 的操作码缓存。

基本上,它会缓存您对包含文件的调用并缓存 PHP 解释器结果。

最后,我实际上建议您阅读加速网站的最佳实践,这将帮助您以一种可能更显着的方式增强用户体验。

于 2011-03-28T20:11:07.850 回答
1

如果浏览器选择,页面中的元素(例如图像)将完全重新加载。如果您的元素是 PHP 文件,它们通常会在 PHP 页面经常更改时完全重新加载。

不过,您可以在 PHP 中设置标题,告诉浏览器将页面缓存一段时间。有关详细信息,请参阅http://php.net/manual/en/function.header.php

于 2011-03-28T20:04:55.497 回答
0

有很多不同的方法可以做到这一点。我建议使用 Smarty。

switch(strtolower($view)) {
     case "download":
            $smarty->assign("download_var", $downloadvar);
            $smarty->display("Download.tpl");
            break;
     .....
}

更新

我想这还是有点模糊。Smarty 实际上有一个已编译的模板目录,它可以方便地使用。您可以将 smarty 配置为以多种不同方式进行缓存,但基本思想是您有一个基于会话 ID 预编译和存储的平面文件。

于 2011-03-28T20:02:54.173 回答