Codeigniter:逐步加载视图

时间:2012-11-12 10:15:52

标签: php performance codeigniter

我最近将我的抓取/解析P​​HP代码移到了Codeigniter。它使用 cURL SimpleHtmlDom 类从目标URL检索数据,该数据稍后由其他几个库的模型函数处理。

对外部网站和API的多个请求,因此原始PHP脚本花了最多20秒来加载整个页面,但是它没关系< / strong>因为PHP被拆分成几个块,而在运行较低的进程运行时,页面已经呈现HTML,用户可以在处理和显示其余数据时读取HTML。

切换到Codeigniter的问题是在完全执行Controller脚本之前不会呈现HTML ,即使数据进程被拆分为块并由单独的视图加载。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class HomePage extends CI_Controller {

public function index()
{
    $this->load->library('simple_html_dom');
    $this->load->library('library1');
    $this->load->library('library2');
    $this->load->library('library3');

    $this->load->model('HomePage_model');
    $this->load->view('templates/header');

    $targeturl = 'http://www.example.com';

      $variable1 = library1::method1($targeturl);
      $variable2 = $this->HomePage_model->method2($targeturl);
      $data1 = array('variable1' => $variable1, 'variable2' => $variable2);

    $this->load->view('first_set_of_data', $data1);

      $variable3 = library2::method2($targeturl);
      $variable4 = $this->HomePage_model->method3($targeturl);
      $data2 = array('variable3' => $variable3, 'variable4' => $variable4);

    $this->load->view('second_set_of_data', $data2);

      $curlinfo = $this->HomePage_model->cURLmethod($targeturl);
      $data3 = array('curlinfo' => $curlinfo);

    $this->load->view('third_set_of_data', $data3);

    $this->load->view('sidebar');
    $this->load->view('templates/footer');
    }
}

/* End of file homepage.php */
/* Location: ./application/controllers/homepage.php */

我不是试图优化我的代码,因此它运行得更快,已经多次修改了......我要做的是逐步加载视图作为对应的数据每个视图都已准备就绪,而正在处理其他视图的数据。

1 个答案:

答案 0 :(得分:1)

听起来像一个问题,一个不优雅的解决方案。我想你会被迫砍掉所有视图,以便在另一个视图中不调用任何视图,并根据请求加载每个相关视图。

而不是views/index.php拥有:

<html>
<body>
<? $this->load->view('content') ?>
</body>
</html>

你有view/index_start.php

<html>
<body>

view/index_end.php

</body>
</html>

在它们之间,在每个请求后加载单独的视图。从控制器加载所有视图。同样,这个设计推荐。

echo $this->load->view('file', array(), TRUE)