Php 如何在不破坏浏览器的情况下在页面上显示大量输入?
我有一个包含产品列表的数组。每次我试图显示产品时,我的浏览器都会崩溃,因为数据太多了Php 如何在不破坏浏览器的情况下在页面上显示大量输入?,php,html,arrays,Php,Html,Arrays,我有一个包含产品列表的数组。每次我试图显示产品时,我的浏览器都会崩溃,因为数据太多了 $products = array(... 40000 products ...); ?> <table class="table table-bordered"> <thead> <tr> <th></th> <th>#</th>
$products = array(... 40000 products ...);
?>
<table class="table table-bordered">
<thead>
<tr>
<th></th>
<th>#</th>
<th>Product name</th>
</tr>
</thead>
<tbody>
<?php foreach ($products as $product): ?>
<tr>
<td><input type="checkbox" /></td>
<td><?= $product->id; ?></td>
<td><?= $product->name; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
以上内容使我的浏览器崩溃。对于40000种产品来说,这并不意外。我唯一不知道的是,有什么更好的解决方案可以做到这一点。我需要列出所有这些产品
编辑
我不确定分页是否可行,因为我想使用jQuery搜索结果。这是一个可以让我从数据库中选择大量产品并将其导出到CSV的页面。了解分页。这是展示所有产品的最佳方式 这是一个很棒的教程,我从中学习到了它。虽然有点旧,但它能很好地教授基础知识 另一种方法是使用AJAX。加载30个产品,让用户向下滚动页面。到达页面末尾时,再加载30个产品。
我相信这就是所谓的无限滚动Facebook新闻源风格。使用分页或无限滚动选项来确保一次只加载chuncks 分页: 无限卷轴
呈现40000个项目时会出现可用性问题,这就是为什么许多站点使用分页和/或AJAX无限滚动的原因 也就是说,使用PHP呈现40000个项目对于浏览器来说是很好的。然而,为了实现这一点,在呈现许多项目时,需要考虑一些因素,包括PHP内存、响应时间等 除了呈现之外,由于您的目标是使其可搜索,因此问题可能在于客户端搜索代码性能,它需要将所有数据加载到可搜索的数据结构中。更有效的方法是在浏览器中获取搜索参数,并对数据库运行服务器端搜索,以显示匹配结果 以下是一些建议: 使用迭代器 要避免的第一件事是将如此多的项加载到内存中,例如通过创建一个包含许多项的数组。最好得到一个迭代器并循环使用它来限制内存使用 例如:
# Slow and consumes a lot of memory
$products = array();
for ($i=1; $i<=40000; $i++) {
array_push($products, ['id' => $i,'name'=>'foobar']);
}
# Very fast and works fine on Chrome, Firefox, Safari
<table>
<?php for ($i; $i<=40000; $i++) { ?>
<tr>
<td><input type="checkbox" /></td>
<td><?= $i; ?></td>
<td><?= 'foobar'; ?></td>
</tr>
<?php } ?>
</table>
使用数据库时,可以一次渲染每个项目,也可以渲染以下项目。确保查询本身的速度也很重要
<table>
<?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ?>
<tr>
<td><input type="checkbox" /></td>
<td><?= $row['id']; ?></td>
<td><?= $row['name']; ?></td>
</tr>
<?php } ?>
</table>
使用轻量级数据结构
第二个要考虑的事情是尽可能轻地处理每一个项目。如果您有一个复杂的项,则需要为每个项实例化一个对象。如果有一个简单对象,则可以使用数组或关联数组
服务器端搜索与客户端搜索
在客户端上使用JavaScript/jQuery搜索这么多结果也可能是一个问题。对于这么多的结果,从浏览器获取搜索输入,使用具有适当索引的数据库查询在服务器端执行搜索,并只返回匹配项,这将更有效。本例中最大的问题是输入字段。删除它们,即使一次显示50000行,性能也会大幅提高。是否考虑过分页?分页。如果不这样做,浏览器将崩溃。我不认为有40.000行的html表对于浏览器来说太多了。它可以稍微慢一点滚动它,但绝对不应该崩溃。你尝试了哪些浏览器?@Marki555实际上只是firefox。可能是我的数据库是瓶颈吗?例如,尝试使用wget获取URL。然后您将看到php是否能够生成完整的输出。