当前情况:我有一个网页,使用AJAX/JQUERY每17秒刷新一次页面上的所有内容。每次发生这种情况时,服务器都会从数据库中查询两个表中的数据,其中一个表很大(大小为 450MiB,11 列)并处理所有数据。
这太耗费资源了。我想要:
- 仅当两个表之一发生更改时,服务器才会查询数据库。
- 仅当表已更新并且服务器已重新处理数据时,页面才会通过 AJAX 重新加载页面。
我认为这属于 cometd 编程的范畴。我不确定。
2 很简单。该网页每 17 秒(或更短)调用一次“update.php”。如果未进行任何更改,PHP 脚本不会返回任何数据。仅当返回数据时,当前页面才会被新数据替换。如果有更好的方法请指教。
至于1,我的谷歌搜索告诉我,每次更新我的两个表之一时,我可以在表中放置一个通知(或者可能只是文件中的一个字节),以表明我必须再次查询数据库,然后下次网页发送 AJAX 请求时返回数据。
问题是我正在使用一个相当大的代码库,这不是我编写的,而且我不知道两个表中任何一个都可以更新的所有位置。有没有更简单的方法来检查数据库何时被修改。
我正在使用 PHP、Apache、Drupal 和 MYSQL。
最佳答案
您可以查看服务器发送的事件
服务器发送事件是指网页自动从服务器获取更新的事件。
HTML5rocks.com - Server Sent Events 有一篇很棒的文章
您所要做的就是创建一个对象
var source = new EventSource('xyz.php'); //Your php files which will return the updates.
一旦创建了对象,就可以监听事件
source.addEventListener('message', function(e) {
console.log(e.data);
}, false);
关于PHP DRUPAL : How to detect changes to table in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31025985/