我将图片从我的Rails应用程序直接上传到S3。当我加载显示图像的索引页面时,它直接从S3检索图像URL。
我要做的是检查S3图像是否存在使用'存在?' API文档中的方法,如果图像存在,则显示该图像,如果图像不存在,则显示存储在我的资产管道中的默认图像。
我能够做到这一点,但是性能变得非常慢(加载时间为10秒!)而且从我的日志开始,这是由于所有不存在的图像返回的所有404 KeyNotFound错误。当我检索所有图像而不执行此操作时?检查,页面加载速度明显加快(不到1秒 - 图像不是我的网页上只有空白)。
我该如何解决这个问题?我想在缺少图像的情况下显示默认图像。
答案 0 :(得分:0)
将图像存储在S3上,但保留包含服务器上图像的视图片段缓存。
尝试显示图像的第一页访问将产生成本,但此后,缓存命中将减少其他尝试显示该图像的响应时间。
使用一些相对简单的片段缓存管理逻辑,这可以很好地缓存需要“太多时间”组装的视图片段。
正在缓存视图的模型负责使包含其数据的缓存过期 - 当模型实例的缓存数据发生更改时,它会吹掉显示该数据的缓存数据片段 - 不一定都显示所有缓存视图它的数据,只是受影响的人。
我为索引视图,显示视图以及模型的数据出现在不同模型的“相关项目视图”中时使用了不同的片段缓存。