我必须编写一个函数,并且想知道哪个会更快。
在数据库表中使用getimagesize()
或存储图像大小并从那里获取?
我承认在编写应用程序时还有其他因素需要考虑。但我确实需要知道这一点,谢谢。
我必须编写一个函数,并且想知道哪个会更快。
在数据库表中使用getimagesize()
或存储图像大小并从那里获取?
我承认在编写应用程序时还有其他因素需要考虑。但我确实需要知道这一点,谢谢。
我怀疑 getimagesize
实际上取决于图像的大小。宽度/高度通常存储为元数据,这意味着只需要处理图像标题。因此,它应该是一个“相对快速”的操作,并且应该花费 [大部分] 恒定的挂钟时间。
话虽如此,我暂时倾向于数据库调用总体上“更快”。(为了有利于我的论点,我将一个无阻塞的数据库投影在具有适当连接池和适当模式/索引的低延迟连接上。)
数据库具有更热的缓冲区和略少的 IO 的潜力。维度信息被压缩到更少的位上,并且数据库可能能够避免额外的系统调用(getimagesize
每次都必须打开文件)。
将尺寸存储在数据库中可以避免重复的图像标题处理。尽管我声称“相对较快”,但该操作确实需要时间,这可能会增加许多调用。
如果从数据库访问任何其他图像元数据,则可以将尺寸信息作为“零成本”添加简单地包括在内。
或者,缓存提供程序(例如 memcached)可以完全破坏传统 RDBMS 数据库的性能,以便进行简单的关联/获取,并且可以根据getimagesize
需要提供支持。
正如 zerkms 所说,在实际使用环境中测量不同方法是了解哪种方法更快的唯一方法。有些因素可能会使“性能”倾向于一种方法而不是另一种方法。当然,这甚至可能无关紧要:专注于让慢 3% 更快:)
更有可能的是,存储在数据库中会更快。
getimagesize()
根据图像的大小,可能会非常慢。您可能需要使用一次来获取大小,然后存储在数据库中。之后,查询数据库以获取大小
一切都取决于大小。
我相信数据库查询会更快,尤其是当图像可能很大时。