下面是一个简化的示例,用于说明我们的应用程序中存在的性能问题。
我们的应用程序具有以下关系:
人员->公司->徽标图片
其中 Person 和 Company 是ActiveRecord对象,而 Logo Image 是使用CarrierWave与 Company 相关的图像文件并存储在S3中。
我们有有效的代码,其行为如下:
persons.collect do |person|
person.company.logo_image.read
end
性能问题与从S3提取logo_image的速度缓慢有关。在上面的示例中,假定人员通常都属于同一公司,但是不能一概而论。因此,通常代码会一遍又一遍地到达S3以获取完全相同的对象。
是否有任何方法可以指示载波将读取的文件保留在本地文件系统缓存中?换句话说,Carrierwave看到它只是在路径“ AWS:/ x / y / z”处获取了对象,而只是从本地文件系统中获取文件以代替读取?我了解这会引入一些缓存验证问题,但是想在创建我们自己的科学怪人解决方案之前先知道存在哪些选项。
请注意,这是一个非常简化的示例。在实际的代码库中,我们将无法有效地创建位于此代码块之前和之内的自己的缓存“哈希”。
欣赏您的见解!