将图像作为数据URL存储在数据库而不是静态图像中是值得的吗?

时间:2014-02-27 23:17:45

标签: html5 url

我有一个网站,我让用户上传图片。我通过HTML5将这些图像转换为数据URL,并将它们作为文本字段存储在数据库中:http://en.wikipedia.org/wiki/Data_URI_scheme

我认为这会减少页面加载的时间,因为我需要减少HTTP请求,即使主HTML页面会更长。

我很怀疑,存储在URL中的这些图像在数据库中占用的空间比磁盘上的静态对应物占用的空间多。我注意到图像的数据URL有250K个字符(因此我假设存储在250KB中),但是当我右键单击并在磁盘上保存相同的图像时,图像只有180K。

数据网址是否会显着增加存储图像所需的内存?

3 个答案:

答案 0 :(得分:2)

是。存储为数据URI的图像将通过base64_encode进程。其膨胀率约为30%。

你正在接近这个错误。

  • 将文件本身存储在磁盘上,由文件夹分隔。我喜欢将图像命名为其内容的哈希值。这样,如果你愿意,你可以轻松避免重复。
  • 将数据存储在数据库中的这些图像上。包括路径,上传时间,上传用户,土星卫星的位置,以及您在数据库中可能需要的任何其他数据,除了图像本身,它应该存储在文件系统中。
  • 如果您愿意,可以实时生成数据URI(就像我说的那样,它是一个简单的base64_encode)。

答案 1 :(得分:1)

如果您对数据库列使用多字节字符编码,则还可能需要250KB以上的空间。如果它们是250K字符,则可能使用500K到1M的磁盘空间。

它们不仅占用更多空间,而且用户浏览器无法独立于其所在页面缓存它们。这可能会显着降低性能。

答案 2 :(得分:1)

绝对不值得记忆。如其他答案所述:

  • base64编码增长约30%(Second Rikudos答案)
  • 我不建议将图像数据存储在数据库中,但存在争议,see here
  • 在主html中提供base64编码的dataURL可能适用于小图片,但是当我们谈论用户上传的图片时,我怀疑它们是轻量级的(不超过10k,取决于一点)。此外,Daniels关于缓存的注意事项也很重要。但事实上,这已经是另一个问题了。