使用ajax制作网站减速或mysql锁定显示通知并在网站中打开弹出窗口

时间:2017-11-11 06:48:27

标签: php jquery ajax drupal

我在网站上使用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();
    }
  });
}

1 个答案:

答案 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