SetTimeout()导致高CPU使用率

时间:2015-06-24 06:19:11

标签: javascript php jquery performance

我试图通过在PHP页面中使用alert来显示来电,因为我需要每隔一秒检查一次来电是否存在。

Ajax:

function checkPushTask()
 {
     var idleTimer = null;
     $.ajax({
         type: "POST",
         url: "<?php  echo  CController::createUrl('/site/checkPushTask'); ?>",  
         async:true,
         success: function(msg){
             if(msg != -1)
             {  
                if (idleTimer != null)
                     window.clearTimeout(idleTimer);
                $(".TaskDisplay").html(msg);        
                idleTimer = setTimeout(checkPushTask, 3000);        
             }

             },
         error: function(){

         }
       });
 }
 checkPushTask();

控制器操作:

public function actioncheckPushTask()
    {

        $criteria = new CDbCriteria();
        $criteria->alias = 'qws';
        $criteria->join = 'inner join crm_base_contact on crm_base_contact.crm_base_contact_id = qws.crm_base_contact_id';
        $criteria->condition = 'qws.crm_base_contact_id in (Select crm_base_contact_id from crm_campaign where is_active = 1 and status < 2 and crm_campaign_id in 
                                (select crm_campaign_id from crm_campaign_agent where g_user_id = '.yii::app()->user->getUserID().'))';
        $count = QueryWSModel::model()->count($criteria);
        if ($count > 0)
        {
            $cuser = CRMUser::model()->findByAttributes(array('g_user_id'=>yii::app()->user->getUserID()));
            $pendingmodel = PendingTaskModel::model()->find(array( 'condition' => 'FIND_IN_SET(:QueryWS_agent_id,QueryWS_agent_id)',
                                                                                'params' => array( ':QueryWS_agent_id' => yii::app()->user->getUserID())));
            if (sizeof($pendingmodel) > 0 && $cuser['current_task_id'] == null)
            {
                $user = Yii::app()->getComponent('user');
                $user->setFlash(
                'info',
                CHtml::link('Incoming Call: OpenTask #'.$pendingmodel->crm_task_id,$this->createUrl('operator/TaskOpen',array('id'=>$pendingmodel->crm_task_id)),array('style'=>"color:white"))
                );
                ob_start();
               $this->widget('bootstrap.widgets.TbAlert', array(
                'fade' => true,
                'closeText' => '&times;', // false equals no close link
                'events' => array(),
                'htmlOptions' => array(),
                'alerts' => array( 
                'info' => array('closeText' => '&times;'),
                ),
                ));
                $tab1Content= ob_get_contents();
                ob_end_clean();
                echo $tab1Content;
            }
        }
        else 
            echo -1;
    }

以上查询占用CPU使用率高,请任何人指导我减少CPU负载!!

1 个答案:

答案 0 :(得分:0)

条件idleTimer != null永远不会满足。将变量idleTimer移出函数作用域,因此每次执行函数时都不会创建变量(并初始化为null)。就这样:

 var idleTimer = null;
 function checkPushTask()
 {
     $.ajax({
         type: "POST",
         url: "<?php  echo  CController::createUrl('/site/checkPushTask'); ?>",  
         async:true,
         success: function(msg){
             if(msg != -1)
             {  
                if (idleTimer != null)
                     window.clearTimeout(idleTimer);
                $(".TaskDisplay").html(msg);        
                idleTimer = setTimeout(checkPushTask, 3000);        
             }

             },
         error: function(){

         }
       });
 }
 checkPushTask();
相关问题