php 从数据库中获取数据会减慢页面速度

标签 php mysql freeze

我在 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);
 ?>

最佳答案

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

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

  1. 不要使用旧的 mysql 扩展(mysql_* 函数),而是考虑使用更新的 MySQLi 扩展,它可以帮助您完成旧扩展无法完成的事情;喜欢asynchronous queries .在新开发中使用旧的 mysql 扩展也是非常不鼓励的,因为它目前正处于弃用计划中。参见 MySQL: choosing an API在 PHP 手册中获取更多信息。
  2. 检查phpinfo()确保你没有使用 output buffering (这需要在将数据发送到客户端之前缓冲一定数量的数据)。这可能导致客户端等待直到有数据准备好发送。尽快将一些 HTML 内容推送给客户端有助于改善用户体验。
  3. 不要在查询中使用 SELECT * FROM table,而是考虑明确选择每个查询所需的字段:SELECT image,title,short_discription FROM recent_works
  4. 如果有大量数据(可能超过一百行),请考虑使用分页LIMIT每个页面 View 查询到一定数量的行。这可以大大减少您的 DBM 和 PHP 之间基于每个请求的流量。
  5. 如果是高负载站点,请考虑使用 persistent database connection .

关于php 从数据库中获取数据会减慢页面速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13737120/

相关文章:

php - 来自 PHP 的 SFTP - 未定义常量 CURLOPT_PROTOCOLS 和 CURLPROTO_SFTP?

php - 不使用 DISTINCT/GROUP BY 如何从 mysql5 表中获取唯一的数据行?

php - 在论坛中转义输入的正确/最安全的方法是什么?

c - 如何将执行命令从 bash 脚本翻译成 C?或者如何在 "W"模式下正确使用 popen()?

c# wpf dispatcher.beginInvoke 卡住

php - 当用户登录时检索并存储有关用户的其他信息

mysql - 用于连接但不在其他表中的 SQL 语句

mysql - 选择上周内的日期,但不仅限于过去 7 天

php - 如何使用ajax从mysql数据库的 Bootstrap 模式中显示当前插入的数据?

python - Pycharm 升级到 4.0.5 导致问题