关于 php:Codeigniter: 逐步加载 Views
Codeigniter: load Views progressively
我最近将我的抓取/解析 PHP 代码移至 Codeigniter。它使用 cURL 和 SimpleHtmlDom 类从目标 URL 检索数据,这些数据随后由模型函数几个其他库处理。
有几个对外部 Web 和 API 的请求,所以原始 PHP 脚本需要 20 秒才能加载完整的页面,但没关系,因为 PHP 被分成几个块,而下面的进程正在运行页面已经在渲染 HTML,用户可以在处理和显示其余数据时读取 HTML。
切换到 Codeigniter 的问题是,在完全执行 Controller 脚本之前不会呈现 HTML,即使数据进程被拆分为块并由单独的 Views 加载。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class HomePage extends CI_Controller { public function index() $this->load->model('HomePage_model'); $targeturl = 'http://www.example.com'; $variable1 = library1::method1($targeturl); $this->load->view('first_set_of_data', $data1); $variable3 = library2::method2($targeturl); $this->load->view('second_set_of_data', $data2); $curlinfo = $this->HomePage_model->cURLmethod($targeturl); $this->load->view('third_set_of_data', $data3); $this->load->view('sidebar'); /* End of file homepage.php */ |
我并没有试图优化我的代码以使其运行得更快,它已经被修改了好几次......我正在尝试做的是逐步加载视图作为每个视图对应的数据已准备就绪,而其他视图的数据正在处理中。
相关讨论
- 在 codeigniter 或任何框架中,最好的方法是使用 ajax 方法在页面加载后加载额外的数据。
- 感谢@Ahmad 的帮助。我是 Ajax 的新手,您能否介绍如何实现它或链接到我可以开始学习的文章?
听起来像是一个不雅的解决方案的问题。我想你被迫砍掉所有视图,以便在另一个视图中不调用任何视图,并根据请求加载每个相关视图。
所以不是 views/index.php 有:
|
1
2 3 4 5 |
<html>
<body> <? $this->load->view('content') ?> </body> </html> |
你会有 view/index_start.php:
|
1
2 |
<html>
<body> |
和 view/index_end.php:
|
1
2 |
</body>
</html> |
在它们之间,在每个请求之后加载单独的视图。从控制器加载所有视图。同样,不推荐这种设计。
|
1
|
echo $this->load->view('file', array(), TRUE)
|
相关讨论
- 谢谢你的帮助,罗宾。但是,这就是我已经尝试过的......控制器当前加载 view('templates/header') 和 view('templates/footer') 中间有几个视图,并且仍然不会逐步显示它们。
- 你确定你是在正确的时刻加载它们吗?如果您在 2 个视图之间进行大量调用,会发生什么?也尝试运行一个 echo $this->load->view('file', array(), TRUE) 代替。它可能会解决它。
- 谢谢! echo $this->load->view('file', array(), TRUE) 解决了这个问题。无论如何,我会尝试像@Ahmad 建议的那样实现一个 ajax 解决方案。
- 是的,请考虑这种方法。这是一个更合乎逻辑的解决方案,因为大多数浏览器更喜欢一次拥有整个网站,然后加载许多不同的繁重内容。