[英]Codeigniter: load Views progressively
我最近将抓取/解析PHP代码移到了Codeigniter。 它使用cURL和SimpleHtmlDom类从目标URL检索数据,该数据稍后由模型函数的其他几个库处理。
对外部Web和API的请求有很多,因此原始的PHP脚本花费了20秒的时间来加载整个页面,但这是可以的,因为PHP被分成了几个块,而较低层的进程正在运行该页面时已经在渲染HTML,可以在处理和显示其余数据时由用户读取。
切换到Codeigniter的问题在于,即使Controller脚本已完全执行 ,也不会呈现HTML ,即使将数据处理拆分为块并由单独的View加载也是如此。
<?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 */
我并不是想优化我的代码,所以它运行得更快,它已经被修改了好几次...我想做的是随着与每个视图相对应的数据准备就绪, 逐步加载视图 。其他视图正在处理中。
听起来像是一个毫无疑问的解决方案的问题。 我猜想您将被迫砍掉所有视图,以便在另一个视图中不调用任何视图,并按请求加载每个相关视图。
因此,而不是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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.