1

Windowsでワンプサーバーを使用しています。データベースから少しのデータを取得すると、ページがひどくハングします。これは、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. 大量のデータ (おそらく 100 行以上) がある場合は、ページネーション使用を検討し、クエリをページ ビューごとに特定の行数に制限します。これにより、DBM と PHP 間のリクエストごとのトラフィック量を大幅に削減できます。
  5. 負荷の高いサイトの場合は、永続的なデータベース接続の使用を検討してください。
于 2012-12-06T05:17:26.997 に答える