我在MySQL上有2个大表,users
有1538行,而ads
有5414行,当我尝试同时加载它们和在HTML表上显示它们的数据时,页面变慢了下来,只需要大约10秒钟即可呈现这些表格
<?php $getAllUsers = "SELECT * FROM users"; ?>
<?php $getAllPosts = "SELECT * FROM posts"; ?>
<!-- USERS TAB -->
<div id="usersTab" class="tab w3-container">
<h1>Usuários</h1>
<table id="usersTable" class="w3-table w3-striped w3-bordered w3-hoverable" style="width: 100%">
<thead>
<th>ID</th>
<th>Nome</th>
<th>Email</th>
<th>Senha</th>
<th>Data de cadastro</th>
</thead>
<tbody>
<?php foreach ($connect->query($getAllUsers) as $tableRow) {?>
<tr onclick="editUserData()">
<td><?php echo $tableRow["ID"] ?></td>
<td><?php echo $tableRow["user_login"] ?></td>
<td><?php echo $tableRow["user_email"] ?></td>
<td><?php echo $tableRow["user_pass"] ?></td>
<td><?php echo $tableRow["user_registered"] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<!-- ADS TAB -->
<div id="adsTab" class="tab w3-container">
<h1>Anúncios</h1>
<table id="adsTable" class="w3-table w3-striped w3-bordered w3-hoverable" style="width: 100%">
<thead>
<th>ID</th>
<th>Titulo do anúncio</th>
<th>Data de publicação</th>
</thead>
<tbody>
<?php foreach ($connect->query($getAllPosts) as $tableRow) {?>
<tr>
<td><?php echo $tableRow["ID"] ?></td>
<td><?php echo $tableRow["post_title"] ?></td>
<td><?php echo $tableRow["post_date"] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
我想知道是否有任何方法可以提高性能并减少表加载时间
答案 0 :(得分:0)
您应该遵循以下技术从数据库中检索大量数据。当您处理企业级应用程序时,它将为您提供帮助。
1。分块数据
当数据库中有大量数据时,应将数据打包为小集合。这意味着每页获取100个数据并使用分页来管理页面。 (使用Ajax更好)。
更多信息
2。索引
索引数据库设计中非常重要的事情。它将优化检索过程。
3。集群
数据库集群是一项高级技术,通常在大型生产中用于控制数据丢失,数据库服务器故障以及数据库系统中的流量。但是,请学着自己的知识。
答案 1 :(得分:0)
由于您的表中的数据量相对较大,耗时10分钟,因此我建议您使用ajax调用而不是在服务器端呈现表。
就像用两个表制作一个静态页面一样;
<table id="usersTable" class="w3-table w3-striped w3-bordered w3-hoverable" style="width: 100%">
<thead>
<th>ID</th>
<th>Nome</th>
<th>Email</th>
<th>Senha</th>
<th>Data de cadastro</th>
</thead>
<tbody>
<!-- Render this section via JS ajax success function -->
</tbody>
</table>
<!-- table 2-->
<table id="adsTable" class="w3-table w3-striped w3-bordered w3-hoverable" style="width: 100%">
<thead>
<th>ID</th>
<th>Titulo do anúncio</th>
<th>Data de publicação</th>
</thead>
<tbody>
<!-- Render this section via JS ajax success function -->
</tbody>
</table>
现在页面加载中使用两个不同的ajax调用来获取JSON格式的数据。
在PHP端,您可以将数据压缩为gzip格式以使数据更小;
header('Content-Encoding: gzip');
header('Content-Length: '.strlen($gzipoutput));
因此,如果您这样做,将会获得类似的设施;
1。两个表的数据将并行获取
2。非阻塞用户界面
3。 GZIP编码将减少传输的数据量
现在,如果可能的话,我建议在您的表中使用分页(尽管我不知道您的要求)。如果您使用分页,它将确实有助于使页面快得多。仅供参考,如果您尝试通过自己的编码来实现分页,那会很耗时,而您可以将某种JS库用于网格(例如JqGrid, JQuery data table, Handsontable
等)
如果您真的只想使用PHP,还可以使用一些高级解决方案。喜欢;
集群数据库
为表建立索引以快速获取数据
使用PHP的P线程以并行方式获取数据。