我在网站上使用drupal。我编写了自定义模块,它在浏览器中显示通知,并在网站中打开弹出窗口。
我正在使用JavaScript函数,如果条件为false或出现错误,则每隔15秒或更短时间调用一次。
问题是如果打开了5个页面,那么在所有页面上设置超时功能在所有页面上每15秒或更短时间调用并使站点变慢或破坏站点。
请提供一些改善本网站性能的指示。
(function ($) {
$(function() {
// 任何需è¦æ‰§è¡Œçš„js特效
setTimeout("countSecond2()", 15000);
$('body').on('click','#popClose',function(event){
//jQuery(".pop_content_message").click(function() {
$(this).parents('#pop').remove();
});
});
})(jQuery);
function countSecond() {
var data = '';
var need_delay = 0;
var js_common_messages_popup = '/messages/popup';
jQuery.ajax({
url: js_common_messages_popup,
type : "post",
dataType : "text",
data : data,
async: true,
success: function(msg) {
var Obdata = jQuery.parseJSON(msg);
if(Obdata !=null){
//alert('1p='+JSON.stringify(msg));
var call = Obdata.call;
var output = Obdata.output;
var selectbox = Obdata.selectbox;
var checkbox = Obdata.checkbox;
var url = Obdata.url;
var need_delay = Obdata.need_delay;
if (call == '1') {
browser_notification(Drupal.t('You have a new reminder'), '', url);
jQuery('#id_pop_task').prepend(output);
jQuery('#id_pop_task .pop_content_message').show();
/*jQuery('#id_pop_task').html(output);
jQuery('#pop').show();
jQuery("#popClose").click(function() {
jQuery('#pop').hide();
});*/
if (selectbox == '1') {
//jQuery("#antiStress").selectbox();
jQuery("[id=antiStress]").selectbox();
}
if (checkbox == '1') {
jQuery('.customR input[type="checkbox"]').ezMark({checkboxCls: "ez-checkbox-green", checkedCls: "ez-checked-green"});
}
setTimeout("countSecond2()", 15000);
}else {
countSecond2();
}
}
else {
countSecond2();
}
},
beforeSend: function() {
//jQuery('#loading').hide();
},
complete: function() {
},
error: function() {
countSecond2();
//location.reload();
}
});
}
function countSecond2() {
var data = '';
var need_delay = 0;
var js_common_messages_popup = '/messages/popup2';
jQuery.ajax({
url: js_common_messages_popup,
type : "post",
dataType : "text",
data : data,
async: true,
success: function(msg) {
var Obdata = jQuery.parseJSON(msg);
if(Obdata !=null){
//alert('2p='+JSON.stringify(msg));
var call = Obdata.call;
var output = Obdata.output;
var selectbox = Obdata.selectbox;
var checkbox = Obdata.checkbox;
var url = Obdata.url;
var need_delay = Obdata.need_delay;
if (call == '1') {
browser_notification(Drupal.t('You have a new reminder'), '', url);
jQuery('#id_pop_task').prepend(output);
jQuery('#id_pop_task .pop_content_message').show();
/*jQuery('#id_pop_task').html(output);
jQuery('#pop').show();
jQuery("#popClose").click(function() {
jQuery('#pop').hide();
});*/
if (selectbox == '1') {
//jQuery("#antiStress").selectbox();
jQuery("[id=antiStress]").selectbox();
}
if (checkbox == '1') {
jQuery('.customR input[type="checkbox"]').ezMark({checkboxCls: "ez-checkbox-green", checkedCls: "ez-checked-green"});
}
setTimeout("countSecond2()", 15000);
}else {
countSecond();
}
}
else {
countSecond();
}
},
beforeSend: function() {
//jQuery('#loading').hide();
},
complete: function() {
},
error: function() {
countSecond();
//location.reload();
}
});
}
答案 0 :(得分:0)
在这种情况下,我建议您先在选项卡中检测用户是否处于活动状态,然后在指定的时间段内发送ajax请求:
像这样:$(window).on("blur focus", function(e) {
var prevType = $(this).data("prevType");
if (prevType != e.type) {
switch (e.type) {
case "blur":
// do work
break;
case "focus":
// do work
break;
}
}
$(this).data("prevType", e.type);
})
如果您希望将服务器推送数据发送给客户端,也可以使用websocket。
有关检测此处提供的有效标签的详细信息:How to tell if browser/tab is active