关于背景PHP的通知

I have a web application that use notification to inform user about anything new (just like Facebook).

My solution is that I send a request every three seconds to check the database if there is anything new to display (jQuery and AJAX). However, this makes the application slow, since a request is sent to check tables every three seconds.

I want to know how to make these notifications work without interrupting the application.
So this is my JS code:

jQuery(document).ready(function(){    

    LoopNotificationCRM();

  });
    function LoopNotificationCRM(){
  setTimeout('LoopNotificationCRM();',3000);
  $.ajax({
            async: false,
            type: "POST",
            url: "controllers/c_ajax_notification.php",
            data: "ordre=check_new_notification",
            success: function(msg){
              if(msg != 'NAN'){
               var t = msg.split('***');
               $('.sNotification').html(t[0]);
               $('.ul-notification').html(t[1]);
               $('.alert-notification').css('display','block');
              }else{
               $('.sNotification').html(0);
               $('.alert-notification').css('display','none');
               $('.ul-notification').html('');
              }
            }, 
          error: function (xhr, status) {  
            alert('Erreur: ' + status); 
            } 
         });
}

And this is my PHP Code:

$notification->getNewNotification("*");
         if($notification->db_num_row != 0){
                      $listNoti = '';
                      while($resN = $notification->fetch_array()){
                       $today = new DateTime(date('Y-m-d H:i:s'));
                       $datNoti = new DateTime($resN['date_not_crm']);

                       $diff = $datNoti->diff($today);
                       if($diff->d == 0){
                         if($diff->h == 0){
                           if($diff->i == 0){
                              $intervale = 'il y a '.$diff->s.' sec';
                           }else{
                              $intervale = 'il y a '.$diff->i.' min';
                           }                           
                         }else{
                           $intervale = 'il y a '.$diff->h.' heure(s)';
                         }
                       }else{
                           $intervale = 'il y a '.$diff->d.' jour(s)';
                       }

       $listNoti .= '<li>  
                                 <a onclick="link(event,\''.$resN['url_not_crm'].'\');updateEtatNoti(this,'.$resN['id_not_crm'].');" style="cursor:pointer;">
                                 <span class="label label-icon label-success"><i class="'.$resN['icon_not_crm'].'"></i></span>
                                 '.$notification->csNotification($resN['description_not_crm']).' 
                                 <span class="time">'.$intervale.'</span>
                                 </a>
                              </li>';
                     }

            echo $notification->getCountNewNotification().'***'.$listNoti;
        }else{
         echo 'NAN';
        }

When I remove the notification code my application become more fast !

If your application is slowing down when you run the ajax every 3 seconds, try simplifying/shrinking the amount of work the page loaded by the ajax needs to do. Rather than reading an entire table, for example, try selecting only notifications with a "read" status of 0. That way, the .php file is faster to execute, meaning the ajax will not slow down the page as much.