在服务器上存储图片的最佳方式是什么?使用 PHP。

3
我有一个 Web 服务,使用6个不同的参数生成图像。整个过程需要1秒钟。我使用了 ImageCreateFromPNG、ImageCopy 和 ImageJPEG 函数。现在我想加速它。我的想法是在服务器上保存已经生成的图像,并且如果具有相同6个参数的图像已经存在,则使用该名称。我的问题是:是否有比将 jpg 文件保存在服务器目录中更好的存储图像的方法?(因为可能会有 6^6(即 6 的六次方)种组合可能性)。再见,jogi。
2个回答

4

将图片以传统的文件形式存储在服务器上。

将图片存储在数据库中不是高效的,可能会导致更多的麻烦而不值得。将图片存储在文件夹中(甚至可以是它们自己的小文件夹),并像往常一样链接到它们。这将使用户轻松缓存图像,并对您的服务器影响最小。

从文件结构中提供文件比查询数据库、提取信息、告诉用户数据是什么以及每秒/分钟/小时/天执行多少次要少得多。

另一方面,如果这些是大型图像,占用了大量空间,您可能需要考虑动态生成它们,直到您能够负担更多驱动器空间,但如果可以的话,我建议选择第一种选项。

最后(也可能是最重要的——打破常规思维),我不知道这些图像的情况,但您还可以考虑其他创建它们的方法。例如,它们可以被平铺吗?而不是存储数百个图像,您是否可以从10个部分制作这些数百个图像?您甚至可以将它们发送给客户端,而无需将它们连接起来,只需将它们排列在页面上,使它们看起来像是一个图像——但这只是一种初步的想法。


+1 表示大多数开发人员的看法 ;) 说真的,将图像作为数据库中的 blob 格式并不是正确的做法! - Keval Domadia
@KarmicDice 在 dbase 中吗?还有人在网页上使用 dbase 吗?或者曾经使用过吗? - Sammaye
@Sammaye 很遗憾,是的,他们曾经这样做,而且可能仍在继续。我记得曾经阅读过很多关于将图像存储在数据库中有多么好的教程,当时感到非常震惊。 - Fluffeh
哦,dbase是数据库的缩写?哈哈,还有一个叫做dbase的数据库,我就是这样读的 :) http://www.dbase.com/ 实际上我们有时候在这里使用的是:http://en.wikipedia.org/wiki/DBase - Sammaye

0

我不是在打广告,但目前有一种非常有益的存储方式,叫做GridFS。

它基本上是一种将数据放入MongoDB的方法(我相信其他数据库也有自己的存储机制)。

主要的缺点是速度较慢,但主要的优点是它非常容易进行分片和在网络(甚至全球范围内)分发您的图像。您甚至可以将它们ping到CDN上一段时间,以使它们变得更快。

然而,我应该说这是针对大型网站的。您的网站听起来像是一个普通的个人博客类型项目,所以我建议只需将图像存储在服务器上的目录中即可。

然而,即使始终从目录中提供服务也可能变得繁琐,因此您可以采取某些缓存机制,例如在图像上永不过期的标头,以确保浏览器尽可能长时间地缓存它们。还可以在Web服务器(如Apache)中缓存它们,因为我怀疑您不想始终直接从存储它们的目录中提供服务,而且在您偶尔这样做时,您会希望防止恶意人员触碰您的图片,因此作为一种预防措施(以及服务器配置),您可能会从服务器端语言或其他方式提供未缓存的图像。

使用任何GD工具都会极大地占用负载和CPU,因此您应该尽可能少地使用它们,因为在这种情况下,几兆字节的文件存储比新实例更便宜,因为您的CPU受到超大图像的限制。

在Google上还有更多建议和注意事项。例如,从Google直接获取:http://developer.yahoo.com/performance/rules.html/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接