2013-02-18 81 views
1

我使用以下代码来检查注释中描述的一些情况。 不幸的是,它降低了页面加载速度。 为了改善功能并正确使用它们,您有什么建议,我该怎么做?优化函数,用于加速应用程序

function insert() { 
    if ($this - > session - > userdata('logged_in')) { //This is for test whether the user is logged in or not? 
     if ($this - > siran - > access_level_active()) { //This is because the user name manager is active or not? 
      if ($this - > siran - > access_level('1', '5')) { //This is for whether or not permission to access this page? 
if($_POST){ 
       $this - > load - > view('admin/onepage'); 
}else{ 
     $this->session->set_flashdata('message_p', $this->lang->line('nopost')); 
     redirect($this->session->userdata('previous_page')); 
     } 
      } else { 
       $this - > session - > set_flashdata('message', $this - > lang - > line('notaccess')); 
       redirect($this - > session - > userdata('previous_page')); 
      } 
     } else { 
      $this - > session - > set_flashdata('message', $this - > lang - > line('noactive')); 
      redirect('login', 'refresh'); 
     } 
    } else { 
     $this - > session - > set_flashdata('message', $this - > lang - > line('plslogin')); 
     redirect('login', 'refresh'); 
    } 
} 

库笨这三个功能:

public function access_level($mp, $access){ 
    //$mp = '1'; 
    $CI = &get_instance(); 
      $result = $CI->db->get_where('access_level', array('mainpage'=>$mp,'id_relation'=>$CI->session->userdata('id_relation'))); 
    $data = array(); 
    $out = array(); 
    foreach($result->result() as $row){ 
     $dv = json_decode($row->subpage);  
     $flat = array();   
     foreach ($dv as $item) { 
      $flat = array_merge($flat, explode(',', $item)); 
     }  
     $out = array_merge($out, $flat); 
    } 
    if(in_array($access, $out) || in_array('110', $out)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 
public function access_level_active(){ 
    //$mp = '1'; 
    $CI = &get_instance(); 
      $result = $CI->db->get_where('users', array('id'=>$CI->session->userdata('id'))); 
    if ($result->num_rows() > 0){ 
     $row = $result->row(); 
     return ($row->active == 1 ? true : false); 
    }else{ 
     return false; 
    } 
} 
function previous_page(){ 
    $CI = &get_instance(); 
    if ($CI->session->userdata('logged_in')) { 
     if (isset($_SERVER['HTTP_REFERER'])) 
     { 
      $CI->session->set_userdata('previous_page', $_SERVER['HTTP_REFERER']); 
     }else 
     { 
      $CI->session->set_userdata('previous_page', base_url()); 
     } 
    } 
} 
+0

我的直觉就是你从查询中跑到速度点。你可以记录所有查询并发布一些供我们查看吗?代码本身看起来不是特别密集。有多少用户同时点击导致速度问题? – mkaatman 2013-02-18 22:12:21

+0

http://ellislab.com/codeigniter/user-guide/general/profiling.html,你有没有尝试过使用内置的基准和分析器? – tomexsans 2013-02-18 23:13:12

+0

'$ foo - > bar'不是表示它的传统方式。事实上,它看起来像两个独立的运营商,事实并非如此。您应该使用'$ foo-> bar'代替。 – 2013-02-19 03:07:02

回答

0

您的代码看起来并不特别强烈,我会改变的唯一事情就是限制倍量嵌套如果{}其他{}语句,并将任何重复的代码移出到另一个函数。例如,我将亲自重写您的insert()代码(主要是因为它看起来更清洁)。

插入功能:

function insert() { 

    if (!$this->session->userdata('logged_in')) { 
     $this->_flashRedirect('login', $this->lang->line('plslogin')); 
    } 

    if (!$this->siran->access_level_active()) { 
     $this->_flashRedirect('login', $this->lang->line('noactive')); 
    } 

    if (!$this->siran->access_level('1', '5')) { 
     $this->_flashRedirect($this->session->userdata('previous_page'), $this->lang->line('notaccess'));  
    } 

    if($_POST){ 
     $this->load->view('admin/onepage'); 
    } else { 
     $this->_flashRedirect($this->session->userdata('previous_page'), $this->lang->line('nopost'), 'message_p'); 
    } 

} 

在控制器中创建一个新的功能_flashRedirect()

public function _flashRedirect($page, $message, $message_type = 'message') { 
    $this->session->set_flashdata('message', $message); 
    redirect($page, 'refresh'); 
} 

至于速度,这听起来很容易,你的查询(MySQL的)是事业你的表现问题。你有多少行返回,你的表有多大?