我已经用AJAX替换了我网站上的iframe。它现在变得更好,速度更快。人们可以单击刷新按钮刷新动态区域。
我正在使用此功能:
function djrefresh() {
$('#dj_status').load('inc/dj_status_frame.php');
$('#djbanner').load('inc/djbanner.php');
$('#djknopjes').load('inc/dj_knopjes_frame.php');
$('#djzegt').load('inc/dj_zegt_frame.php');
$('#djfooter').load('inc/footer_frame.php');
$('#berichtenbalkframe').load('inc/berichtenbalk_frame.php');
}
工作得很好,但我的网站需要同时加载很多东西。我希望用户能够单击一次并超时30秒。
...或者如果你有更好的主意,请告诉我。我不希望用户使用我自己的脚本来DDOS我的网站。提前谢谢。
答案 0 :(得分:1)
更改您的网站arcitcture 可能是最佳选择,但如果没有更多信息,则很难提供任何建议。无论如何,要限制对djrefresh
的通话,您可以使用去抖功能。 UnderscoreJS包含该功能,您也可以自己编写。
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
这取自https://davidwalsh.name/javascript-debounce-function(我个人使用了很多)。
这假定“刷新按钮”是页面的按钮,而不是浏览器刷新。
编辑:如果您的站点上有刷新按钮,单击它后再禁用30秒会更简单。
答案 1 :(得分:0)
只需创建一个调用计数,对调用使用回调,如果所有调用都已完成,则允许该函数继续。
var djrefresh;
//close values to reduce variable name collision
(function(){
var locked = false;
var callcount = 0;
djrefresh = function() {
if( locked ) return;
locked = true;
$('#dj_status').load('inc/dj_status_frame.php',unlock);
$('#djbanner').load('inc/djbanner.php',unlock);
$('#djknopjes').load('inc/dj_knopjes_frame.php',unlock);
$('#djzegt').load('inc/dj_zegt_frame.php',unlock);
$('#djfooter').load('inc/footer_frame.php',unlock);
$('#berichtenbalkframe').load('inc/berichtenbalk_frame.php',unlock);
}
function unlock(){
if( ++callcount == 6 ) locked = false;
}
})()