发布计数器每日,每周,每月,所有时间的PHP& MySQL的

时间:2012-10-02 20:13:41

标签: php mysql wordpress

我有一个网站,上面有几篇帖子/文章,我可以在过去24小时,上周,上个月和每个帖子的所有时间浏览中跟踪。

我在db中的每个视图上保存时间戳。当有人打开主页时,我循环这些时间戳并相应地保存到最后24小时/上周/上个月/所有时间在数据库中。 这工作“很好”(但问题)。

现在出现问题:

如果我有5000个帖子怎么办? PHP脚本必须循环所有5000个帖子,并节省导致性能问题。该功能完成后,该站点不会立即显示。 我已经收到错误消息“允许的内存大小耗尽......”。

我该如何解决这个问题?有什么解决方案吗?

在打开主页以获取确切的计数器数据时运行此功能非常重要。

如果我只在帖子视图上执行此功能,那么仅针对此帖子,数据将不准确。想象一下,这个帖子已经好几天没有被查看了,计数器数据也不会被更新。

注意:这是一个Wordpress主题,在这种情况下不是很重要。

1 个答案:

答案 0 :(得分:0)

你可以考虑使用WordPress的cron函数 wp_cron here

注意:与“真正的cron作业”不同,它依赖于对火的访问。

另外,请查看使用 Transients API 。瞬态会使性能大幅提升! (here


简单来说,Transients API会缓存一个循环。因此,不是每次循环5000个帖子,它将循环一次然后设置一些数据。在后续加载时,它将获取缓存的数据。如果数据不存在或已过期,它将循环帖子以缓存新数据。

查看此伪代码

if ( false === ( $query = get_transient( 'query' ) ) ) {
    // It wasn't there, so regenerate the data and save the transient
    $query = new WP_Query( '//Your Loop Stuff' );
    set_transient( 'query', $query );
}
$timestamps = $query->TIMESTAMP(or whatever you use);