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>
                   &mdash;
                </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。

希望我的回答对您有所帮助