0

提前为冗长的帖子道歉,只是想清楚地解释情况。

我创建了一个 PHP 驱动的网站,用于搜索大型(数百万条记录)MySQL 数据库。在搜索页面上,您有常用的搜索条件表单。由于人们经常使用该站点的方式,搜索条件被保存到会话变量中,因此如果重新加载搜索页面,以前的条件仍保留在表单字段中(当然,有一个手动重置条件的按钮)。这本身就可以正常工作。

我还有两个语言选择链接,它们将语言选择存储在会话变量中(使页眉加载适当的本地化文件),如上所述,这本身也可以正常工作。

有问题的是,当用户获得搜索结果时,人员列表,并想要打开一个人的详细信息(因此从 search.php 到 info.php),然后想要返回到人员列表通过后退按钮,由于页面重新发送 MySQL 查询等,重新加载上一页需要太长时间,而不是返回到缓存页面。有时甚至可能需要 5 秒或更长时间,因为查询会产生多达 5000 个结果 - 但即使说,重新加载 200-500 个结果也需要很长时间,因为数据库本身很大而且不是世界上最快的。限制结果的数量并不实际。

乍一看,显而易见的解决方案似乎是启用浏览器缓存。这正是我通过 PHP 标头和编译指示控件所做的。一切似乎都很好,因为回到列表基本上是瞬间的。但是,我意识到启用缓存意味着更新的会话变量不起作用。在进入不同页面后重新加载搜索页面时,新的搜索条件无法正确替换旧的搜索条件,即使您选择了另一种语言,页面也会以您之前使用的语言打开,因为这是它们被缓存的方式!您可以通过 F5 强制语言更新,但这似乎对搜索条件没有多大帮助。但即使这样做了,F5-spam 也不是真正的答案,它需要自动工作。

长话短说,如何在不使会话变量无用的情况下快速打开搜索结果列表?或者在使用后退按钮时我是否只需要处理缓慢的页面加载,从而让用户感到厌烦?我也真的不想在新页面中打开 info.php。

4

1 回答 1

0

您是否考虑过在文件系统上缓存数据库结果?我发现 Zend Framework 缓存类非常易于使用。您可以使用所需的任何信息来区分缓存结果和其他缓存结果。因此,缓存可以根据需要进行细粒度。

http://framework.zend.com/manual/1.12/en/zend.cache.introduction.html

您不需要使用整个 Zend Framework 来使用该类。您可以单独使用它。

于 2013-11-01T15:15:57.320 回答