1

我在 Windows 上使用 wamp 服务器。从我的数据库中获取一点数据时,我的页面严重挂起。它就像一个简单的帖子,有 1 个图像 1 个标题和一些描述,当我触发命令时,它会严重挂起我的页面。这是我的代码的样子。

    <?php
    //1. Create a connection
    $connection= mysql_connect("localhost","root","");
    if(!$connection){
        die("Database Connection Failed :" . mysql_error());
    }

    //2 Select a database to use
    $db_select = mysql_select_db("gat", $connection);
    if (!$db_select) {
        die("Database selection failed: " . mysql_error());
    }

    ?>
<html>
<head>
    <title>Database Check</title>
</head>
<body>
    <?php 
        //3 perform database query
        $result=mysql_query("SELECT * FROM recent_works",$connection);
        if (!$result) {
            die("Database query failed:" . mysql_error());
        }

        //4 use returned data 
        while ($row= mysql_fetch_assoc($result)) {  
            echo "<div class='work_item'>";
            echo "<img src='{$row['image']}' alt=''>";
            echo "<h2>{$row['title']}</h2>";
            echo "<p>{$row['short_discription']}</p>";
            echo "</div>";
        }
     ?>
</body>
</html>
<?php 
    //5 close connection
    mysql_close($connection);
 ?>
4

1 回答 1

1

从数据库中获取数据总是会涉及到某种程度的阻塞。问题是您要获取多少数据。您的示例表明您正在从表中选择所有内容并获取所有数据以打印到页面上。因此,表中有多少行,每列中存储了多少数据,以及有多少数据被传输到客户端,这些都是速度的供应因素。此外,您必须考虑连接到数据库也有成本。

以下是我可以对上述代码提出的一些建议:

  1. 不要使用旧的 mysql 扩展(mysql_* 函数),而是考虑使用更新的 MySQLi 扩展,它可以帮助你做旧扩展不能做的事情;像异步查询。在新开发中使用旧的 mysql 扩展也是非常不鼓励的,因为它目前处于弃用计划中。有关更多信息,请参阅PHP 手册中的MySQL:选择 API
  2. 检查phpinfo()以确保您没有使用输出缓冲(这需要在将数据发送到客户端之前缓冲一定数量的数据)。这可能会导致客户端等待,直到准备好发送数据。尽快将一些 HTML 内容推送到客户端可以帮助改善用户体验。
  3. 不要SELECT * FROM table在查询中使用,而是考虑明确选择每个查询所需的字段:SELECT image,title,short_discription FROM recent_works
  4. 如果有很多数据(可能超过一百行),请考虑使用分页并将查询限制为每次页面视图的特定行数。这可以大大减少每个请求的 DBM 和 PHP 之间的流量。
  5. If it's a high load site consider using a persistent database connection.
于 2012-12-06T05:17:26.997 回答