【问题标题】:Webpage crashes when loading jQuery DataTable - too many rows?加载 jQuery DataTable 时网页崩溃 - 行数太多?
【发布时间】:2017-05-29 15:02:27
【问题描述】:

我正在开发一个管理系统网站,该网站由从服务器上运行的 Postgres 数据库中提取的数据表组成。我一直在通过编写 PHP 查询并回显数据库中的数据行来检索数据。这适用于我网站上的所有页面,除了尝试从包含超过 50,000 条记录的表中检索数据的页面 - 当我尝试加载该页面时,它要么超时,要么完全崩溃我的浏览器。使用 pgAdmin 查看该表中的数据时,大约需要 10-20 秒。

有谁知道为什么会发生这种情况,或者我可以如何加快数据表的加载时间?谢谢!

编辑

这就是我使用 PHP 查询数据库的方式:

$query = "SELECT respondentid, pro, homephone, otherphone, fname, lname, note from respondent";
$result = pg_query($query);
echo "<table id='respondents'>";
echo "<thead> <tr> <th>Headings</th> </tr></thead>";

while($row = pg_fetch_array( $result )) {
  echo '<tr>';
  echo '<td>' . $row['columnnames'] . '</td>';
  echo "</tr>";
  echo "</table>";          

这里是数据库列:

respondentid serial not null,
pro character varying(3),
homephone character varying(15),
otherphone character varying(15),
fname character varying(15),
lname character varying(20),
note text

【问题讨论】:

  • 能否在日志、查询、表结构和查询解释计划中发布错误消息?
  • 你试过LIMIT Query Optimization吗?例如。 LIMIT 50
  • @Arkhena 编辑了我的帖子并提供了更多详细信息。我不确定日志中的错误消息,因为我的页面已经挂在那里很久了,我不确定要查找什么。
  • @joe-black 我希望将所有记录加载到表中,因为该表的主要用途是搜索,我需要能够搜索所有记录。
  • dataTables 将超出大多数浏览器脚本执行限制 apx。大约 4-5.000 行。如果您需要处理更多的行,您应该考虑serverSide processing。这不是错误,也不是因为 dataTables 很慢,它确实在客户端代码上进行了优化 - 任何 JS 代码或 jQuery、角度、ember 都无法处理 5.000 个表行,用排序、过滤、自定义渲染、事件和在默认浏览器执行时间限制内以此类推。

标签: php postgresql datatables


【解决方案1】:

您可以使用此快速解决方法从表中检索所有行:

  • while循环包装代码,
  • 在查询中添加ORDER BY 子句,
  • 使用LIMIT 子句仅选择几行。

.

echo "<table id='respondents'>";
echo "<thead> <tr> <th>Headings</th> </tr></thead>";

$rows_total_result = pg_query('SELECT COUNT(*) FROM respondent');
$rows_total_row = pg_fetch_row($rows_total_result);
$rows_total = $rows_total_row[0];

$offset = 0;
$row_count = 1000;

while (($offset + $row_count) <= $rows_total) {

    $query = "SELECT respondentid, pro, homephone, otherphone, fname, lname, note "
           . "from respondent ORDER BY respondentid "
           . "LIMIT {$row_count} OFFSET {$offset}";
    $result = pg_query($query);

    while ($row = pg_fetch_array($result)) {
        echo '<tr>';
        echo '<td>' . $row['columnnames'] . '</td>';
        echo "</tr>";
    }

    $offset += $row_count;
}

echo "</table>";

不过,这并不能解决浏览器崩溃的问题,因为数据量很大,执行时间可能很长。

常见的解决方案是实现分页浏览大表。

【讨论】:

  • 当我尝试这个时,我收到错误消息“致命错误:超过 30 秒的最大执行时间”并且表停止加载,并且看起来不像数据表。
  • 是的,我刚刚编辑了我的答案来解释这个问题。请检查一下。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
相关资源
最近更新 更多