2

我正在从数据库中加载 9 张图像,我的语法大致如下:

<img src="image_loader.php?id=4"></img>

我的 image_loader.php 的 PHP 看起来像:

<?php
    /* I set up my connection using mysql_connect and mysql_select_db */

    $query = sprintf("SELECT ... FROM ... WHERE id='".$_GET["id"]."'");
    $result = mysql_query($query, $con);
    mysql_close($con);

    if (!$result) {
        // no result
    }
    else {
        $row = mysql_fetch_row($result); 
        header('Content-type: image/png');
        echo $row[0];
        mysql_free_result($result);
        }
?>

每张图片大约 10-13k,但一堆似乎加载得很慢。我意识到浏览器一次可以执行的请求数量存在一些瓶颈,但等待时间似乎是不必要的。

关于如何快速从数据库加载图像的任何建议?

此外,这几乎是一个单独的问题,但是否可以指示浏览器(或服务器)使用现在 .gif/.png/.jpg srcs 缓存图像?似乎 Firefox 有而 Chrome 没有,但我不确定这一点。

在此处输入图像描述

4

1 回答 1

1

我首先考虑将图像存储在数据库中是否最有意义。可能,但应该认真考虑,因为在文件系统中为每个图像提供一个唯一的文件名并将其存储数据库中通常会更快。

如果您可以直接从客户端请求该文件,而不是请求执行某种fopen()-style 抽象的通用 PHP 脚本,您将获得额外的速度。

为了缩小延迟的来源,首先检查您的数据库是否与您的网络服务器托管在同一台服务器上可能会有所帮助。它不是在本地托管而是在远程数据库服务器上的一种指示是检查您在mysql_connect()调用中提供的主机字符串。 localhost会暗示它是本地的,其他的会暗示它不是。需要注意的是,许多共享托管服务(例如 GoDaddy)将其数据库服务器与 Web 服务器分开。

为了更好地了解延迟的来源,我建议您image_loader.php使用时间戳来检测您的代码以定位延迟?我的猜测是它会在查询中。

如果延迟出现您的查询中,您将希望限制您进行的查询数量。允许您进行一次查询而不是 9 次查询的策略将限制任何网络服务器到数据库服务器延迟的影响。

于 2012-06-06T01:11:59.567 回答