我想创建一个可以绕过某些机制的缓存系统,以提高性能。
我有一些例子:
1-)我有一个动态的PHP页面,每小时更新一次。每个用户的页面内容都相同。所以在这种情况下我可以:
a)创建一个HTML页面,该页面可以每小时生成一次。在这种情况下,我想绕过PHP,因此应该有一个静态页面,如果数据库更新,将生成一个新的HTML文件。我怎样才能做到这一点?我可以创建一个生成HTML文件的crontab脚本,但它看起来并不优雅。
b)将输出缓存在内存中,因此Web服务器将每小时更新一次内容。我想我需要一个用于Web服务器的内存缓存模块。有一个非官方的memcache模块用于lighttpd,但它似乎不稳定,我也听说过nginx的memcache模块,但不知道这是否可行。这种方式似乎更优雅和可能,但如何?有任何想法吗? (同样,我想在这种情况下绕过PHP)
另一个例子是我有一个每小时更新的动态PHP页面,在该页面中只有用户详细信息部分是完全动态的(因此用户登录或注销并在该部分中查看他/她的状态)
同样,我如何为此页面创建缓存系统?我想,如果我能找到第一个例子的解决方案,那么我可以在同一个解决方案中使用AJAX。我是对的吗?
编辑:我想,我无法说清楚。我想完全绕过PHP。 PHP脚本将每小时运行一次,之后不会进行任何PHP调用。我想删除它的开销。
提前致谢,
答案 0 :(得分:1)
使用静态HTML。每小时只需使用您的输出更新静态HTML文件。您需要使用每小时 cron 来运行PHP脚本到 fopen()和 fwrite()到该文件。没有必要点击PHP来检索页面。只需为该特定页面制作.htaccess mod_rewrite重定向规则,以维护当前的URL命名。
虽然不是很优雅,静态HTML gzip压缩对我来说效率更高并且会使用更少的带宽
使用cron每小时运行PHP脚本的示例:
// run this command in your console to open the editor
crontab -e
输入以下值:
01 * * * * php -f /path/to/staticHtmlCreater.php > /dev/null
最后一部分确保您不会有任何输出。这个cron将在每小时的第一分钟运行。
<强>更新强>
我错过了有关您的动态用户个人资料信息的部分,或者是在我的初始评论之后添加的部分。如果您只使用单个服务器,我建议您切换到APC,它比memcached(对于单个服务器应用程序)更快地提供操作码缓存和缓存机制。如果用户的配置文件数据低于折叠(在用户的窗口视图下方),则可能等待发出AJAX请求,直到用户向下滚动到指定点。您可以在Facebook状态页面上看到此功能。
答案 1 :(得分:0)
如果这只是一个Web服务器,您可以使用PHP的APC模块来缓存页面内容。它并不是真正设计用于缓存整个页面,但它应该在紧要关头。
编辑:我忘了提到APC尚未附带PHP,但可以从PECL安装。它将作为PHP 6的一部分发布。
答案 2 :(得分:0)
一种很好的方法是将静态内容存储在文件中。事情应该像这样:
在每种情况下都能很好地工作,即使在重负荷下也是如此。