Php 加速从数据库加载图像

Php 加速从数据库加载图像,php,sql,performance,wordpress,Php,Sql,Performance,Wordpress,我正在从数据库加载9个图像,我的语法大致如下: <img src="image_loader.php?id=4"></img> 我的PHP for image_loader.PHP如下所示: <?php /* I set up my connection using mysql_connect and mysql_select_db */ $query = sprintf("SELECT ... FROM ... WHERE id='".$_

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

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

我的PHP for image_loader.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,但这组图像的加载速度似乎非常慢。我意识到浏览器一次可以执行的请求数量存在一些瓶颈,但等待时间似乎是免费的

关于如何快速从数据库加载图像,有什么建议吗

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


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

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

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

为了更好地了解延迟的来源,我建议在
image\u loader.php
代码中插入时间戳来定位延迟?我猜它会出现在查询中


如果查询中的延迟,则需要限制查询数量。允许您进行一次查询而不是9次查询的策略将限制任何Web服务器对数据库服务器延迟的影响。

如果您的缓存头设置正确且URL没有更改,则应缓存图像。如果你的问题在带宽上,并且你经常发送相同的图片,你应该考虑将它们组合起来,这样服务器只有一个查询(真的取决于图像,但是,它可以为十几个小图像付费)。你的浏览器可能没有缓存图像,因为它们有查询字符串,可以考虑链接到诸如<代码> IMAGE加载程序4、JPG<代码>和使用URL重写。正如DistROy所建议的,你也可以使用类似于一个轮廓的技术来“瓦解”图像。我也会考虑在数据库中存储图像是否最有意义。可能是这样,但应该认真考虑,因为在文件系统中为每个图像指定一个唯一的文件名,并将其存储在数据库中通常会更快。如果您可以直接从客户端请求该文件,而不是请求执行
fopen()
的通用PHP脚本,那么您将获得更高的速度。这是正确的,但在这种情况下(对于普通数据库),这甚至不应该是可测量的。@vpiTriumph是
mysql\u connect()中的主机名
function localhost还是其他什么?(如果是别的,具体是什么并不重要)。如果不是localhost,我建议在
image\u loader.php
代码中插入时间戳来定位延迟?我猜它会出现在查询中。