ob_get_content() 工作缓慢
slow work with ob_get_content()
我的代码工作速度有问题。
我有这个代码
$res_include = requireToVar('parts/keywords_table.php', $array_vars);
和我的自定义函数
function requireToVar($file, $array = null)
{
ob_start();
extract($array);
include "$file";
return ob_get_clean();
}
我需要生成一个 html 数据并通过 ajax 响应返回页面。
因此,在 html 文件中,我生成了 2000 行 table。
并将此代码放入变量中。
此代码在 10-15 秒内运行,而且非常慢。
请给我一些提示或一些想法,我可以如何优化此代码。
这是包含文件
<table class="table table-hover">
<th>№</th>
<th>Ключевое слово</th>
<th>Search volume</th>
<th>Av. CPC</th>
<th>competitions</th>
<th>Статистика за год</th>
<th>Source</th>
<!--<th>categories</th>-->
<?php $i = 1;foreach ($res as $keyword) :?>
<tr>
<td><?php echo $i++ ?></td>
<td><?php echo $keyword->keyword ?></td>
<td><?php echo $keyword->search_volume ?></td>
<td><?php echo $keyword->average_CPC ?></td>
<td><?php echo $keyword->competition ?></td>
<?php if(is_array($keyword->year_stats)) :?>
<td>
<div class="year_stats">
<a class="year_stats_btn btn btn-info">Статистика за год</a>
<ul class="year_stats_list list-group">
<?php foreach ($keyword->year_stats as $stat) :?>
<li class="list-group-item d-flex justify-content-between align-items-center">Year - <?php echo $stat->year ?>; month - <?php echo $stat->month ?>; count - <?php echo $stat->count ?>;</li>
<?php endforeach; ?>
</ul>
</div>
</td>
<?php else: ?>
<td>
—
</td>
<?php endif; ?>
<td><b><?php echo $keyword->source ?></b></td>
</tr>
<?php endforeach; ?>
</table>
<?php if(isset($searched_also) && !empty($searched_also)) :?>
<h2>Поисковые запросы, которые также делали потребители (Yandex)</h2>
<table class="table table-hover">
<th>№</th>
<th>Ключевое слово</th>
<th>Search volume</th>
<th>Source</th>
<?php $i = 1;foreach ($searched_also as $also_item) :?>
<tr>
<td><?php echo $i++ ?></td>
<td><?php echo $also_item->keyword ?></td>
<td><?php echo $also_item->search_volume ?></td>
<td><b><?php echo $also_item->source ?></b></td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
我前段时间遇到了同样的问题,服务器写入过多 html 并且加载时间很慢。
当我不知道 Ajax 的存在时,我所做的是将所有数据作为 JSON 发送并使用数据 tables,正如您在此处看到的forum,如果您不想或不能将 ajax 与数据 table 一起使用,这种方法非常简单。
其他可能性是使用 Ajax 在您的 table 上加载数据,也是一个示例 here,我所做的就是调用这样的查询。
SELECT * FROM TABLE LIMIT 10 OFFSET $value;
您可以通过一些分页来设置偏移值 table,假设您要显示 10 条记录,那么如果您转到第 2 页,偏移量将为 10。
希望我的回答对您有所帮助
我的代码工作速度有问题。 我有这个代码
$res_include = requireToVar('parts/keywords_table.php', $array_vars);
和我的自定义函数
function requireToVar($file, $array = null)
{
ob_start();
extract($array);
include "$file";
return ob_get_clean();
}
我需要生成一个 html 数据并通过 ajax 响应返回页面。 因此,在 html 文件中,我生成了 2000 行 table。 并将此代码放入变量中。
此代码在 10-15 秒内运行,而且非常慢。
请给我一些提示或一些想法,我可以如何优化此代码。 这是包含文件
<table class="table table-hover">
<th>№</th>
<th>Ключевое слово</th>
<th>Search volume</th>
<th>Av. CPC</th>
<th>competitions</th>
<th>Статистика за год</th>
<th>Source</th>
<!--<th>categories</th>-->
<?php $i = 1;foreach ($res as $keyword) :?>
<tr>
<td><?php echo $i++ ?></td>
<td><?php echo $keyword->keyword ?></td>
<td><?php echo $keyword->search_volume ?></td>
<td><?php echo $keyword->average_CPC ?></td>
<td><?php echo $keyword->competition ?></td>
<?php if(is_array($keyword->year_stats)) :?>
<td>
<div class="year_stats">
<a class="year_stats_btn btn btn-info">Статистика за год</a>
<ul class="year_stats_list list-group">
<?php foreach ($keyword->year_stats as $stat) :?>
<li class="list-group-item d-flex justify-content-between align-items-center">Year - <?php echo $stat->year ?>; month - <?php echo $stat->month ?>; count - <?php echo $stat->count ?>;</li>
<?php endforeach; ?>
</ul>
</div>
</td>
<?php else: ?>
<td>
—
</td>
<?php endif; ?>
<td><b><?php echo $keyword->source ?></b></td>
</tr>
<?php endforeach; ?>
</table>
<?php if(isset($searched_also) && !empty($searched_also)) :?>
<h2>Поисковые запросы, которые также делали потребители (Yandex)</h2>
<table class="table table-hover">
<th>№</th>
<th>Ключевое слово</th>
<th>Search volume</th>
<th>Source</th>
<?php $i = 1;foreach ($searched_also as $also_item) :?>
<tr>
<td><?php echo $i++ ?></td>
<td><?php echo $also_item->keyword ?></td>
<td><?php echo $also_item->search_volume ?></td>
<td><b><?php echo $also_item->source ?></b></td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
我前段时间遇到了同样的问题,服务器写入过多 html 并且加载时间很慢。
当我不知道 Ajax 的存在时,我所做的是将所有数据作为 JSON 发送并使用数据 tables,正如您在此处看到的forum,如果您不想或不能将 ajax 与数据 table 一起使用,这种方法非常简单。
其他可能性是使用 Ajax 在您的 table 上加载数据,也是一个示例 here,我所做的就是调用这样的查询。
SELECT * FROM TABLE LIMIT 10 OFFSET $value;
您可以通过一些分页来设置偏移值 table,假设您要显示 10 条记录,那么如果您转到第 2 页,偏移量将为 10。
希望我的回答对您有所帮助