通过在数据库中保存图像来减少http请求?

时间:2010-06-22 10:53:16

标签: php mysql image

通过从数据库提供较小的图像而不是在网站是由PHP驱动的情况下发出多个HTTP请求来提高页面加载速度是否有意义?

我正在考虑较小的页面设计元素,按钮,画廊的缩略图等。

7 个答案:

答案 0 :(得分:10)

没有。时间:

  • 浏览器只能通过HTTP与服务器通信,因此您必须从数据库中提取它们,将它们放入HTTP中,然后将它们返回到浏览器
  • 从数据库中提取大块二进制数据然后将它们从文件系统中提取出来的成本更高。

如果您想减少HTTP请求,可以sprite the images,但不要对内容图片(应该有正确的<img>元素和alt文本)这样做。

答案 1 :(得分:2)

没有

用户没有直接连接到数据库,你不能(你可以,但它太丑了,我忽略它)输出HTML中的图像数据。它们必须在不同的请求中加载。

如果将它们存储在数据库中,则需要访问数据库然后将其流出。 实际上认真比让httpd服务它更糟糕。如果服务器托管它,只会触及核心服务器和文件系统。如果它在数据库中,它是核心服务器,语言的连接器(例如mod_php),语言(例如php),数据库连接和文件系统(数据库写在其上)。

保持简单。将其保存为文件。

如果你被淹没在请求中:

  • 如果您使用Apache,请考虑使用lighttpd或nginx等服务器。在静态/动态混合环境中大大提高效率。你仍然可以保留apache,或者你可以完全抛弃它。

  • 将您的图像转移到像S3,Akami等CDN上。有很多提供商,它通常只比托管更贵一点(假设你已经有很多流量)。

答案 2 :(得分:2)

您也可以提供来自多个子域的图像,这样您就可以拥有更多可以帮助加速的并发HTTP请求。

答案 3 :(得分:1)

您可以使用Data URI Scheme在HTML中嵌入图片。但是我怀疑它会赎回,你会减少HTTP请求的数量,但是图像可以缓存在客户端上,因此你将大大增加每个响应的长度。

但是,直接从光盘加载这些文件会更快,而不是从DB加载。

答案 4 :(得分:0)

无论浏览器从加载数据库或常规文件中的图像数据的脚本加载图像,HTTP请求的数量都保持不变。实际上,从数据库而不是静态文件加载图像数据可能会带来额外的开销。

如果您希望减少浏览器加载文档所需的HTTP请求数量,您应该查看CSS Sprites

答案 5 :(得分:0)

您可以节省HTTP的开销,但是如何在html中插入图像?否则,您仍然需要发出HTTP请求才能获取图像。

如果您将数据库中的图像作为byteStream提供,则不要让浏览器缓存内容。如果你对每个图像使用HTTP请求,你可以让它们缓存内容,但要付出代价来做更多请求。你还要考虑从数据库中获取图像的时间和处理它们的时间! / p>

我认为在这种情况下你最好的选择是将所有小图片放在一个文件中 sprite ),然后使用CSS来显示它们。这就是高负荷站点的作用。这样您只需执行一个请求并获取所有图像,浏览器将缓存文件,这将提高您的性能。你支付的价格是你需要写更多的CSS,但这只是纯文本和相同数量的文件。这是一个双赢的局面:))

答案 6 :(得分:0)

有多种方法可以改善网站的图像效果

  1. 仅针对静态内容使用备用域。这有两个好处 - 来自主域的cookie不会随每个请求一起发送,而一个单独的域获得它自己的连接分配

  2. 将图像合并到精灵中

  3. 正确配置缓存。设置远期未来的到期标头。设置到期标头,以便在访问网站之间不下载图像。当请求图像时,也可以检查ETAG,如果它们匹配,则返回302响应并且不再次下载内容。

  4. 我不明白为什么来自数据库的流式传输图像比来自文件系统的更好。由于缓存,我的性能数据是主观的。