我有一个页面可以从sql中提取2-3个数据块。 这些块被分成大约20个不同的变量。
您导航到的每个页面都会反复使用相同的数据。
问题:
我应该将所有变量放在会话变量中,还是应该在每个页面上查询数据库,每次都重新建立数据和变量。
某些页面会修改数据库,然后修改变量。
感谢。
答案 0 :(得分:2)
是的,拥有一个缓存机制会很好。但是,php的会话变量不是最佳解决方案。您可以使用缓存系统(如APC或MemCached),也可以将它们存储在硬盘上的文件中。
不使用会话变量的原因:
范围。我敢打赌,你的一些变量可能比会话更广泛。换句话说,一些变量可以在不同的会话之间共享。
急切加载。每当您致电session_start
,所有时,无论您是否需要,变量都会被反序列化并加载。
答案 1 :(得分:1)
您应该尽可能地将数据存储在$_SESSION
中(假设数据量不大并且总是反复使用)。
您遇到的最大问题是数据发生变化时会发生什么。您可以使用以下代码不时刷新它们:
if( rand(0,100) < 10){
readSessionsFromPost();
}
另一种方法是修改本地文件并通过mtime
在每个请求中进行检查(并在$_SESSION
中存储最后一个值)。或者您可以使用:
$time = $db->fetch_one( 'SELECT MAX(mtime) FROM pages');
strtotime( $time) >= $_SESSION['time'];
总结一下。
如果您不关心用户以后获取当前数据20请求,您应该使用rand(我实际上会关心并且永远不会使用此:) :)。
如果您有权配置文件访问权限,则应使用mtime
和修改时间(无需数据库请求)。
如果您只有少量用户并且在服务器性能方面有很大的保留,那么您每次都应该加载它们(或者每隔几秒就会更改数据)。
缓存会增加一些开销,您必须决定缓存这些数据是否对性能至关重要。