javascript - 仅当外部内容更改时刷新 div

标签 javascript php jquery

我目前有几个 div 来获取单独的页面并每 x 秒刷新一次内容。它们将显示足球比赛的实时比分更新,目前在比赛进行时每 90 秒刷新一次,在比赛未进行时每 90000 秒刷新一次(以有效关闭刷新)。

我目前遇到的问题是......

  • 在游戏开始之前,我必须浏览页面并手动更改 JavaScript 计时器并重新上传文件,在游戏结束后执行相同的操作。
  • 即使在 90 秒内,大约有 100 人经常浏览该网站,服务器也会受到一些冲击,可能会减慢速度,或者只是给出 500 内部服务器错误。
  • 如果我在比赛结束后忘记关闭它(或者因为我的手机没有信号而无法关闭),当人们开始回家时流量增加时,网站确实会受到冲击几个小时 - 这导致我们的网站被锁定几周。

相关代码的示例是

<script>
 $(document).ready(function() {
     $("#mdetails").load("/content/phppages/matchdetailsbase.php");
   var refreshId = setInterval(function() {
      $("#mdetails").load('/content/phppages/matchdetailsbase.php?randval='+ Math.random());
   }, 90000);
   $.ajaxSetup({ cache: false });
});
</script>

那个来自http://www.margate-fc.com/content/1st_team/fixtures_results/match_detailsnew.php?all_games_id=4733并刷新整个主要内容区域(在“比赛详细信息”下)。左栏顶部的“匹配” block 上也有类似的一个。

match_detailsnew.php 包含 5 个不同的查询,因此我读到的检查数据库更改的建议很难在这里实现。

诚然,该代码是从某个地方复制/粘贴的,因为当时我对 JQuery 一无所知,尽管我现在仍然对它知之甚少,但它仍在我的学习曲线上。整个网站的设置很糟糕,但这是我大约 4 年前第一次尝试动态网站,目前我正在从头开始重建它。有了这个,我将熟​​悉轮询数据库的更改并基于此进行刷新。然而,这还有很长的路要走,我们现在迫切需要一个解决方案!!

我想要的是 jQuery 检查 matchdetailsbase.php 的输出是否已更改(请记住,这将是由 5 个查询中的任何一个生成的页面上任何位置的更改),如果有,则刷新div,假设这不会给服务器带来与持续刷新相同的压力/页面点击量。

如果由于我的设置而这样做会出现问题,另一种方法是为刷新时间创建一个变量,我可以在一个地方更改该变量,并且所有 div 都会识别该变量。我通过在配置文件中设置 $refreshtime = 900 来尝试此操作,然后将脚本更改为

 $("#mdetails").load('/content/phppages/matchdetailsbase.php?randval='+ Math.random());
   }, <?php echo $refreshtime; ?>);

无论我在 $refreshtime 中输入什么,这似乎都没有什么区别,但即使有,我意识到由于 $refreshtime 位于刷新 div 之外,它不会对其进行任何更改,所以无论如何它被设置为页面首次加载时始终保留,直到手动刷新整个页面,即使我在 config.php 中更改了它。

如前所述,这实际上是一个短期修复,因为网站正在重建,所以如果需要的话,我真的不介意进行一次肮脏的黑客攻击!

提前致谢

史蒂夫

最佳答案

读完问题后,如果我正确理解了您所面临的问题,则解决方案不在 jquery 部分中。解决办法可以在php部分找到。正如您所说,主要问题是服务器由于对 matchdetailsbase.php 的请求而受到重击。因此,即使您正确实现了 rcsole 的解决方案,您的 php 页面仍然会在计时器的每个滴答声上被命中,这反过来会运行所有代码,并且仍然会导致您的服务器受到攻击。

长期解决方案当然是查询/数据库更改和一些积极的缓存技术的组合。但既然你提到这是你正在寻找的短期权宜解决方案,我建议使用一些基于 php 的良好输出缓存。下面是一些链接,可以为您指明输出缓存的正确方向。

http://php.dzone.com/news/php-caching-pages-with-output-

Caching HTML output with PHP

基本理论是,您将 php 脚本的输出存储在静态文件中,然后在接下来的 x 秒内提供该文件的内容。因此,无论客户端调用您的 php 脚本多少次,内容仅每 x 秒生成一次。这应该会降低服务器必须处理的处理量 - 希望如此。请记住,这只是一个短期解决方案。对于您的情况,我建议将缓存持续时间保持在 120 - 180 秒左右。

除了 rscole 的解决方案之外,这应该可以帮助您坚持下去,直到改进整体设计......

关于javascript - 仅当外部内容更改时刷新 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20017738/

相关文章:

php - 如何通过 WhatsApp API 发送图像、音频或视频 - PHP

php - 分解数据库数组 PHP

javascript - jQuery 或 JavaScript 有类和对象的概念吗?

javascript - 当从 javascript 设置值时,ng-model 不会更新

javascript - 使用 JavaScript 根据页面大小获得不同的行为

javascript - AngularJS 通过下拉列表中的选择过滤文本

php - 如何在codeigniter中使用嵌套选择查询来通过每个查询获得不同的结果

javascript - 使用 jquery 在选择框中附加选项

javascript - jquery基础入门问题: How do i make my function reusable?

javascript - 第二次单击时不是 jquery 中的函数错误