Php 每日、每周、每月、所有时间的邮政柜台;mysql

Php 每日、每周、每月、所有时间的邮政柜台;mysql,php,mysql,wordpress,Php,Mysql,Wordpress,我有一个网站,上面有几个帖子/文章,我可以在过去24小时、上周、上个月跟踪这些帖子/文章的浏览量 我在db中的每个视图上保存时间戳。当有人打开主页时,我循环这些时间戳,并将它们相应地保存到数据库中的最后24小时/上周/上月/所有时间。 这“很好”(但有问题) 现在问题来了: 如果我有5000个帖子呢!php脚本必须循环所有5000篇文章,并节省成本,这会导致性能问题。功能完成后,该站点将不会立即显示。 我已经收到一条错误消息“允许的内存大小已耗尽…” 我怎样才能解决这个问题?有什么解决办法吗 在

我有一个网站,上面有几个帖子/文章,我可以在过去24小时、上周、上个月跟踪这些帖子/文章的浏览量

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

现在问题来了:

如果我有5000个帖子呢!php脚本必须循环所有5000篇文章,并节省成本,这会导致性能问题。功能完成后,该站点将不会立即显示。 我已经收到一条错误消息“允许的内存大小已耗尽…”

我怎样才能解决这个问题?有什么解决办法吗

在打开主页时运行此函数以获取准确的计数器数据非常重要

如果我只在post视图上执行此功能,那么仅此post的数据将不准确。假设这篇文章已经好几天没有被浏览了,那么计数器数据就不会被更新了


注意:这是针对Wordpress主题的,在这种情况下并不重要。

您可以研究使用Wordpress的cron函数wp\u cron()

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

此外,还应考虑使用瞬态API。瞬态使性能大大提高!()


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

查看此psuedo代码

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);

首先,你不应该每次有人打开你的页面时都这样做。。。。设置一个cron作业或其他东西,以便每隔一段时间(一天一次)执行一次。其次,您确定必须循环所有帖子吗?有时计数器不更新到最后一秒是可以的。@sachlen建议的cron作业会很有帮助,即使是每隔几分钟一次,或者页面刷新,以较晚的时间为准。谢谢您的回答。问题是我不能使用cron作业,因为它将用于wordpress主题,而该主题的用户将需要设置cronjob,而用户将不具备这方面的知识和“神经”。我需要找到另一个可能的解决办法。