2017-11-11 358 views
0

我正在使用drupal的網站。我寫了自定義模塊,它在瀏覽器中顯示通知,並在網站中打開彈出窗口。使用ajax製作網站緩慢或mysql鎖定顯示通知並打開網站彈出框

如果條件爲錯誤或錯誤發生,我正在使用JavaScript函數,該函數每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

在這種情況下,我建議你首先檢測用戶是在你的標籤主動和後發在規定的期限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

+0

感謝您的答覆:有關檢測這裏提供的活動標籤

更多信息。我檢查 –

+0

不客氣 –

+0

但是,如果通知可用,我已經通知所有時間。所以,如果我使用這個代碼,那麼它將不會一直調用Ajax函數。並且通知不會按時顯示。 –