【问题标题】:How to make image loading from Mysql faster?如何更快地从 Mysql 加载图像?
【发布时间】:2012-12-02 12:28:57
【问题描述】:

最近我尝试将图像存储在 Mysql 数据库中(使用 BLOB 数据类型),使用 php 和 web 来上传和存储它。它工作正常,除非加载足够大的图像,否则加载速度会非常慢。有什么方法可以更快地加载此图像?

注意:我的朋友建议我对这张图片使用强制缓存(他说了一些关于更改图片的内容标题),但我不知道该怎么做。我怀疑它会带来更好的性能。

提前致谢

【问题讨论】:

标签: php html mysql


【解决方案1】:

图像绝对应该被缓存。我认为这可以通过确保您制作的图片网址对于同一张图片始终相同来完成。我认为您的问题是您需要更改 max_allowed_pa​​cket。如果它太小,它将无法一次通过网络发送大量数据。另外,如果图片真的那么大,我还会考虑将图片的质量更改为 70%?所有调整图像大小的功能都有办法改变它。即:http://php.net/manual/en/function.imagejpeg.php。希望有帮助。我也会研究 YSlow。这将有助于指出导致加载缓慢的图像到底有什么问题。无论是质量、缓存、压缩还是 w/e 都可以。

【讨论】:

  • 感谢回复。我已确保图像 url 始终指向相同地址的相同图片。仍在重新加载并且仍然缓慢。但是,当谈到您对 imagejpeg 的 PHP 函数的建议时,真是太棒了!它大大减少了重新加载时间
  • 我也会研究一下 yslow 插件。这将有助于指出导致加载缓慢的图像到底有什么问题。无论是质量、缓存、压缩还是 w/e 都可以。
  • 我还没有检查其他因素。当我所有网站的元素加载成功时,我的印象很奇怪,我仍然需要等待来自 MySQL 的图像加载
【解决方案2】:

当图像存储在文件系统上时,可以使用缓存图像。如果它们是从数据库中动态弹出并打印出来的,那么每次 PHP 代码请求它们时都会获取它们。

可能是在几十毫秒内获取图像,但可以将 3MB 的图像数据下载到客户端浏览器 5 秒到 1 分钟(取决于连接速度)。与它没有多大关系(更不用说常见的共享主机了)。

我建议将图像存储在文件系统中,以便它们可以被浏览器缓存,或者您甚至可以在 Apache 服务器上设置一个内存缓存,以便在过期之前从缓存中提供它们。

【讨论】:

  • 谁说来自数据库的图像不能被缓存? :)
  • 这取决于它们的打印方式...如果它们作为 base64 数据内联打印,例如 <img src="data:image/gif;base64,BASE64_DATA_HERE" />,它们可能不会被缓存...除非启用 FPC 缓存...
【解决方案3】:

我猜缓存可能好也可能不好。而不是我建议您将图像或其他文件上传到文件夹并将有关文件的信息保存在数据库中:名称、类型、大小、文件夹等......

【讨论】:

    【解决方案4】:

    如果您没有任何要求将图像存储在数据库中,则图像最好放在文件夹中,并且您应该在数据库中存储每个图像的路径或名称。

    这将使它们正常加载。当然,这取决于图像的大小。

    这几乎可以在所有 Web 应用程序中找到。

    【讨论】:

    • 谢谢。我知道,但是当我需要删除、更新或备份数据库时,我喜欢这种简单性。我只是使用 sql 查询来执行此操作,而不需要处理文件夹中的图像。
    • 没关系。那么请注意数据库空间。
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多