我有一个使用 6 个不同参数生成图像的网络服务。该过程持续 1 秒。我使用函数 ImageCreateFromPNG、ImageCopy 和 ImageJPEG 现在我想加快速度。这个想法是保存已经在服务器上生成的图像,如果它们已经存在,则通过使用带有 6 个参数的名称来使用它们。我的问题是:有没有比将 jpg 文件保存在服务器目录中更好的方法来存储图像?(因为有 6^6(恕我直言 6 的 6 次方)组合可能性)
再见乔吉
将图像以老式文件形式存储在服务器上。
将图像存储在数据库中效率不高,并且最终可能会带来比其价值更多的痛苦。将图像存储在一个文件夹中(甚至可能是他们自己的小文件夹)并按照正常方式链接到它们。这将允许用户轻松缓存图像,并且对您的服务器的影响最小。
从文件结构中提供文件所需的资源比查询数据库、提取信息、告诉用户该数据是什么以及每秒/分钟/小时/天执行多次所需的资源要少得多。
现在,另一方面,如果这些是大图像并且占用大量空间,您可能会考虑动态生成它们,直到您可以提供更多驱动器空间,但如果可以的话,我建议您使用第一个选项。
最后(可能是最重要的——跳出框框思考),我不知道这些图像是什么样的,但您也可以考虑其他创建它们的方法。例如,它们可以平铺吗?与其存储数百张图像,您可以从 10 个片段中制作数百张图像吗?您甚至可以将它们原样发送给客户,而无需将它们连接起来,只需将它们排列在页面上,使它们看起来就像是一个图像 - 但这只是在吐槽。
我并不是要插入,但有一种有益的存储 atm 类型,GridFS。
它基本上是一种将数据放入 MongoDB 的方法(我相信其他数据库有自己的存储机制)。
主要缺点是速度,但主要优点是在您的网络(和全球)上分片和分发图像非常容易。您甚至可以暂时将它们 ping 到 CDN 以使它们更快。
但是我应该说这适用于更大的网站。您的网站听起来像是一个普通的个人博客类型项目,所以我想说只是将图像存储在服务器上的目录中。
然而,同样,即使一直从目录中提供服务也会变得很痛苦,因此您可以设置某些缓存机制,例如永远不会使图像上的标头过期,以确保浏览器尽可能长时间地缓存它们。还要将它们缓存在您的网络服务器(如 Apache)中,因为我怀疑您是否会一直直接从您存储它们的目录中提供它们,并且在极少数情况下,您会想阻止恶意的人将他们肮脏的手指放在您的照片上因此,作为预防措施(与服务器端配置一起),您可能会从服务器端语言或其他语言中提供未缓存的图像。
使用任何 GD 工具都会造成极大的负载和 CPU 负担,因此您想尽量少做,因为在这种情况下,几兆的文件存储比新实例更便宜,因为您的 CPU 受超大图像的限制。
Google 上有更多建议和其他建议。例如来自谷歌的直接点击:http: //developer.yahoo.com/performance/rules.html/