代码之家  ›  专栏  ›  技术社区  ›  Leo

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

  •  1
  • Leo  · 技术社区  · 15 年前

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

    我正在考虑更小的页面设计元素、按钮、图库缩略图等。

    7 回复  |  直到 15 年前
        1
  •  10
  •   Quentin    15 年前

    没有,因为:

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

    如果希望减少HTTP请求,可以 sprite the images 但不要对内容图像(应该有适当的 <img> 具有alt文本的元素)。

        2
  •  2
  •   pars    15 年前

    此外,您还可以为来自多个子域的图像提供服务,这样您就可以有更多的并发HTTP请求,这有助于加快速度。

        3
  •  2
  •   Marcel Korpel    15 年前

    不。

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

    如果您将它们存储在数据库中,您需要一些东西来访问数据库,然后将其输出。 事实上 认真地 比让你的httpd服务更糟糕。 如果一个服务器托管它,那么只接触核心服务器和文件系统。如果它在一个数据库中,它是核心服务器、语言的连接器(例如mod_php)、语言(例如php)、数据库连接和文件系统(数据库是写在上面的)。

    保持简单。把它作为一个文件保存。

    如果你被要求淹没:

    • 如果您使用的是Apache,请考虑使用lighttpd或nginx等服务器。在静态/动态混合环境中效率更高。您仍然可以保留Apache,也可以将其完全转储。

    • 把你的图片转移到一个cdn上,比如s3、akami等。有很多提供商,而且通常只比托管贵一点(假设你有很多流量)。

        4
  •  1
  •   nothrow    15 年前

    有可能,您可以使用 Data URI Scheme . 但我怀疑它能否兑现,您将减少HTTP请求的数量,但图像可以缓存在客户端上,因此您将大大增加每个响应的长度。

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

        5
  •  0
  •   Johannes Gorset    15 年前

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

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

        6
  •  0
  •   pakore    15 年前

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

    如果您将图像作为来自数据库的字节流提供服务,则不允许浏览器缓存内容。如果您对每个映像使用HTTP请求,您可以让它们缓存内容,但要为执行更多请求付出代价。 您还必须考虑从数据库获取图像的时间和处理它们的时间!.

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

        7
  •  0
  •   James Westgate    15 年前

    有多种方法可以提高网站的图像性能

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

    2. 将图像合并为精灵

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

    我不明白为什么从数据库中流式传输图像会比从文件系统中更好。因为缓存,我怀疑您的性能数字是主观的。

    推荐文章