我有一个基于PHP的网站。 我使用开关盒包含不同的页面并导航。 我使用了一种方法,以便我的索引页面包含导航栏和页脚
我的问题是每次我从一个页面导航到另一个页面时,所有内容都会再次加载并使网站变得沉重。
<?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>
有没有办法可以设置它,以便这些元素预先加载一次并保留在缓存中,这样每次导航到新页面时都不需要加载它们??
答案 0 :(得分:3)
鉴于您的代码,您实际上不需要缓存任何内容,这样做可能会导致实际需要的更多开销。
缓存或未缓存,您仍然需要访问文件,您的收益将是操作码生成。但是PHP仍然需要访问文件系统,除非你使用memcached RAMFS解决方案,否则你不会注意到真正的变化。
但是,您确实需要缓存代码,出于显而易见的原因,您应该查看APC,这是PHP的操作码缓存。
基本上,它会缓存您对包含文件的调用并缓存PHP解释器结果。
最后,我实际建议您阅读 Best Practices for Speeding Up Your Web Site ,这将有助于您以更加显着的方式增强用户体验。
答案 1 :(得分:1)
如果浏览器选择,页面中的元素(如图像)将完全重新加载。如果您的元素是PHP文件,那么它们通常会在PHP页面经常更改时完全重新加载。
您可以在PHP中设置标题,告诉浏览器将页面缓存一段时间。有关详细信息,请参阅http://php.net/manual/en/function.header.php。
答案 2 :(得分:0)
有很多不同的方法可以做到这一点。我建议使用Smarty。
switch(strtolower($view)) {
case "download":
$smarty->assign("download_var", $downloadvar);
$smarty->display("Download.tpl");
break;
.....
}
<强>更新强>
我猜这有点模糊不清。 Smarty实际上有一个编译模板目录,它保持方便。您可以将smarty配置为以多种不同的方式进行缓存,但基本思想是您有一个基于会话ID预编译和存储的平面文件。