我正在从数据库加载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,但这一束似乎加载速度非常慢。我意识到浏览器一次可以执行的请求数量有一些瓶颈,但等待时间似乎是无偿的。
有关如何快速从数据库加载图像的任何建议吗?
此外,这几乎是一个单独的问题,但是可以指示浏览器(或服务器)使用现在的.gif / .png / .jpg srcs缓存图像吗?似乎Firefox没有,但Chrome没有,但我不确定这一点。
答案 0 :(得分:1)
我首先考虑将数据存储在数据库中是否最有意义。它可能,但应该认真考虑,因为在文件系统中为每个图像提供唯一的文件名,并且在数据库中存储 通常会更快。
如果您可以从客户端请求文件 直接 ,而不是请求执行某种fopen()
的通用PHP脚本,您将获得更高的速度风格抽象。
为了缩小延迟源,首先检查您的数据库是否与您的网络服务器托管在同一台服务器上可能会有所帮助。一个迹象表明它不在本地托管但在远程数据库服务器上是检查您在mysql_connect()
调用中提供的主机字符串。 localhost
会建议其本地,其他东西会暗示它不是。请注意,许多共享托管服务(例如GoDaddy)将其数据库服务器从Web服务器中分离出来。
为了更好地了解延迟的来源,我建议您使用时间戳检查image_loader.php
代码以找到延迟?我的猜测是它会在查询中。
如果查询中的延迟 ,您需要限制所做的查询次数。允许您创建一个查询而不是9的策略将限制任何Web服务器到数据库服务器延迟的影响。