PHP花费太多时间来呈现html表

时间:2018-12-24 12:20:21

标签: php html mysql

我在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>

我想知道是否有任何方法可以提高性能并减少表加载时间

2 个答案:

答案 0 :(得分:0)

您应该遵循以下技术从数据库中检索大量数据。当您处理企业级应用程序时,它将为您提供帮助。

1。分块数据

当数据库中有大量数据时,应将数据打包为小集合。这意味着每页获取100个数据并使用分页来管理页面。 (使用Ajax更好)。

更多信息

2。索引

索引数据库设计中非常重要的事情。它将优化检索过程。

More Info

3。集群

数据库集群是一项高级技术,通常在大型生产中用于控制数据丢失,数据库服务器故障以及数据库系统中的流量。但是,请学着自己的知识。

More Info

答案 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,还可以使用一些高级解决方案。喜欢;

  1. 集群数据库

  2. 为表建立索引以快速获取数据

  3. 使用PHP的P线程以并行方式获取数据。