panpf / sketch

Sketch is an image loading library designed for Compose Multiplatform and Android View. It is powerful and rich in functions. In addition to basic functions, it also supports GIF, SVG, video thumbnails, Exif Orientation, etc.
Apache License 2.0
2.05k stars 309 forks source link

[Function] 希望request中可以增加设置memoryCacheKey的接口 #166

Closed RavenLiao closed 2 years ago

RavenLiao commented 2 years ago

Coil的ImageRequest中可以调用memoryCacheKey()直接设置。因为有时不需要太细致的区分缓存,所以希望可以像Coil一样增加设置cachekey接口来简化获取缓存的流程。

panpf commented 2 years ago

模糊匹配内存缓存确实考虑过,但当时没有想到什么样的情况下有这样的需求,你可否举个栗子?

RavenLiao commented 2 years ago

模糊匹配内存缓存确实考虑过,但当时没有想到什么样的情况下有这样的需求,你可否举个栗子?

就一个很简单的缩略图列表+点击查看原图场景,其实我只关心是同一张图片即可,如果将memoryCacheKey直接设成图片的id,这时候设置placeholder就很方便了。

panpf commented 2 years ago

你说的 placeholder 的情况只需要让 MemoryCacheStateImage 支持模糊匹配即可。 那在 ImageReqest 里支持设置 memoryCacheKey 的意义呢?

RavenLiao commented 2 years ago

模糊匹配确实是一种解决方案,但感觉模糊匹配第一效率不高,第二,使用模糊匹配也增加了出现意外情况的可能性。 但可以在request中直接设置的话,就明确非常多,使用起来也比较简单。

panpf commented 2 years ago

在 placeholder 支持模糊匹配可以要求 url 一样即可,但这样的情况下如果内存中存在不同效果的,比如裁剪了,模糊了的一样 url 的图片,你在查看原图页面可能也不想用这样的图片作为 placeholder,所以 placeholder 到底是用模糊匹配还是精确匹配还要根据你的具体使用场景来决定。

但在 ImageRequest 里支持设置 memoryCacheKey 的话,memoryCacheKey 的影响范围就不是 placehoder 了,而是最终显示在 ImageView 上的结果,而结果通常是要准确的,你觉得什么样的场景会需要模糊的结果呢?

RavenLiao commented 2 years ago

在 placeholder 支持模糊匹配可以要求 url 一样即可,但这样的情况下如果内存中存在不同效果的,比如裁剪了,模糊了的一样 url 的图片,你在查看原图页面可能也不想用这样的图片作为 placeholder,所以 placeholder 到底是用模糊匹配还是精确匹配还要根据你的具体使用场景来决定。

但在 ImageRequest 里支持设置 memoryCacheKey 的话,memoryCacheKey 的影响范围就不是 placehoder 了,而是最终显示在 ImageView 上的结果,而结果通常是要准确的,你觉得什么样的场景会需要模糊的结果呢?

确实是,但现在模糊匹配还没有这个接口,拿不到key列表,希望可以增加一下

panpf commented 2 years ago

新版本测试版发布了,新增了 InexactlyMemoryCacheStateImage 应该可以解决你的需求,sample app 中也用了,可以参考一下