gpt4 book ai didi

php - CodeIgniter Performance 多次加载 View 与 View 循环

转载 作者:可可西里 更新时间:2023-11-01 00:47:29 24 4
gpt4 key购买 nike

我正在尝试解决可能的缩放性能问题。这两种情况是否有更明显的性能优势:

场景一:

多次调用以加载 View 并每次传递少量数据

Controller

public function index()
{
$this->load->view('header');
$this->load->view('table_head');
$results = $this->db->select('*')->from('table')->get()->result_array();
foreach ($results as $key)
{
$this->load->view('table_row', $key);
}
$this->load->view('table_foot');
$this->load->view('footer');
}

查看表头

<table>
<thead>
<tr>
<th>...</th>
<th>...</th>
...
</tr>
</thead>
<tbody>

查看表行

        <tr>
<td><?php echo $var_a; ?></td>
<td><?php echo $var_b; ?></td>
...
</tr>

查看 Table_foot

    </tbody>
<tfoot>
<tr>
<td>...</td>
<td>...</td>
...
</tr>
</tfoot>
</table>

场景 2:

进行 1 次调用以加载 View 并传递大量数据

Controller

public function index()
{
$this->load->view('header');
$this->data['results'] = $this->db->select('*')->from('table')->get()->result_array();
$this->load->view('table', $this->data);
$this->load->view('footer');
}

查看表格

...
<table>
<thead>Header Info...</thead>
<tbody>
<?php foreach ($results as $key): ?>
<tr>echo row information as needed</tr>
<?php endforeach; ?>
</tbody>
<table>
...

我一直在使用场景 1,因为它有助于保持我的应用程序模块化,并通过在 Controller 中保留逻辑循环来保持 MVC 格式。但是假设 SQL 调用的结果是 1000 个条目,甚至更多,这两种情况之间是否存在明显的性能差异?我是否试图让我的应用程序过于模块化?我确实尝试尽可能多地回收我的代码,因此我的更多方法将至少加载 8 个 View 。

最佳答案

好吧,为了这些测试目的,我分解并编写了一个小脚本来膨胀我的表。这是我的小测试的结果。为了保持测试等效,我只更改显示的 View 。

场景一

Controller :

public function results()
{
$this->load->view('headers/header', $this->default_lib->viewdata());
$this->load->view('body_bits/bodyopen');
$this->title['title'] = 'Testing Tesults';
$this->title['link'] = 'tests';
$this->title['link_text'] = 'Back to Tests';
$this->load->view('body_bits/page_title', $this->title);
$this->load->view('tests/results_open');

$results = $this->db->select('*')->
from('test_results')->
where('software', 'nwralpha')->
order_by('time', 'ASC')->
//limit('10')->
get()->result_array();
foreach ($results as $key)
{
$this->data['name'] = ucwords($this->ion_auth->user($key['user_id'])->row()->username);
$this->data['time_taken'] = $key['time'];
$this->data['test_taken'] = $key['test_type'];
$this->data['common'] = ($key['common_codes'] == 1) ? 'Common Code List' : 'Full Code List';
$this->data['date'] = $key['date'];

$this->load->view('tests/results', $this->data);
}

$this->load->view('tests/results_close');
$this->load->view('body_bits/bodyclose');
$this->load->view('footers/footer');
}

查看

<tr>
<td><?php echo $name; ?></td>
<td><?php echo $time_taken; ?></td>
<td><?php echo $test_taken; ?></td>
<td><?php echo $common; ?></td>
<td><?php echo $date; ?></td>
</tr>

场景2

Controller :

public function results()
{
$this->load->view('headers/header', $this->default_lib->viewdata());
$this->load->view('body_bits/bodyopen');
$this->title['title'] = 'Testing Tesults';
$this->title['link'] = 'tests';
$this->title['link_text'] = 'Back to Tests';
$this->load->view('body_bits/page_title', $this->title);
$this->load->view('tests/results_open');

$results = $this->db->select('*')->
from('test_results')->
where('software', 'nwralpha')->
order_by('time', 'ASC')->
//limit('10')->
get()->result_array();

$this->data['results'] = $results;
$this->load->view('tests/resultsloop', $this->data);

$this->load->view('tests/results_close');
$this->load->view('body_bits/bodyclose');
$this->load->view('footers/footer');
}

查看

<?php foreach ($results as $key): ?>
<tr>
<td><?php echo ucwords($this->ion_auth->user($key['user_id'])->row()->username); ?></td>
<td><?php echo $key['time']; ?></td>
<td><?php echo $key['test_type']; ?></td>
<td><?php echo $key['common_codes']; ?></td>
<td><?php echo $key['date']; ?></td>
</tr>
<?php endforeach; ?>

结果

我用 1004 个结果和 11004 个结果测试了这两个示例,这是我使用 CodeIgniter 的内置 Profiler 发现的结果

1004 个结果

场景 1 平均加载时间:1.94462 秒
场景二平均加载时间:1.1723秒

11004 个结果

场景 1 平均加载时间:19.78867 秒
场景 2 平均加载时间:11.81502 秒

这是什么意思

对于其他只想知道答案而不阅读整篇文章的人:
虽然逻辑和 HTML 的分离是 MVC 框架的重点,但在可接受的情况下,您可以使用逻辑来确定如何显示信息。在这种情况下,我只使用了一个循环来不断地根据需要吐出统一的信息。此测试表明进行最少数量的 View 调用更有效。

关于php - CodeIgniter Performance 多次加载 View 与 View 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com