PreQuest icon indicating copy to clipboard operation
PreQuest copied to clipboard

cache 插件的 缺陷

Open lzlv312 opened this issue 2 years ago • 10 comments

插件内部缓存数据的变量没有提供可清理的功能,那么随着缓存数据的增加,这个岂不是会内存溢出? 根据现在的设计,至少应提供一个可手动释放的方法,或者在内部设置一个最后请求的时间戳,因为现在的缓存有效期是全局的而不是跟随单个请求记录的,那么你完全可以在下一次发起请求时,判断当前缓存的数据是否过期,过期了就应该 Map.clear() 清理整个缓存,连计时器都用不上,您觉得呢。 :)

lzlv312 avatar Jun 27 '22 04:06 lzlv312

你觉得实现的不好,可以提个 PR 什么的

xdoer avatar Jun 27 '22 05:06 xdoer

index.zip 我目前是这样修改的,你先看下有没问题。 @xdoer

lzlv312 avatar Jun 28 '22 07:06 lzlv312

fixed.zip

根据目前项目需要,我又加了个验证,根据请求的结果决定是否应该缓存数据,比如下图 @xdoer image

lzlv312 avatar Jun 30 '22 01:06 lzlv312

@lzlv312 好的,我周末看一下,最近比较忙。你可以 fork 一份代码改的,不用传 zip 代码包

xdoer avatar Jun 30 '22 06:06 xdoer

没关系,我也在忙,看你没发包,我就先本地改了用,要不然得出bug了 :)

lzlv312 avatar Jun 30 '22 11:06 lzlv312

大概明白了,这里的主要问题在于接口的响应值是无效的,但是因为换存的原因,导致在 ttl 内,发起的很多请求都拿不到最新的值。

xdoer avatar Jul 03 '22 09:07 xdoer

嗯,对,不过看了下你发布的,感觉少了点处理,我还是先用着自己的版本吧 :),另外 xhr 那个的修改也可以看下,瞅瞅是否有什么不妥,我那样改的最终效果是 h5 的 和 小程序 的 在拦截器那里的处理几乎是一样了,除了状态码,错误码,header字段的不同。

lzlv312 avatar Jul 03 '22 14:07 lzlv312

@xdoer 我改了下源码,你审查下看看能否合并,若不能,我能否发布个npm包已便自用?我的项目已使用修改的这个完成一次更新迭代,应该没啥问题。。。

lzlv312 avatar Jul 12 '22 11:07 lzlv312

大概看了一下你的改动,在 cache 里加了一个缓存失效清除的处理,个人认为是没有必要的。。一个 web 单页应用,按照 200 个不同类型的接口来算,每个接口 10kb 的数据,简单估算一下,也才 2 mb 的大小,与 gb 级别的内存大小比起来,这真的不算什么 你改动的源码发 npm 包是可以的,但好像没啥必要,就是一个函数,直接在项目里写个文件就好了

xdoer avatar Jul 13 '22 03:07 xdoer

@xdoer 我们的客户是医院的,他们有些电脑还是xp系统,内存也小的很,之前不是提过 proxy 不支持嘛,就是因为要兼容他们的电脑,包括手机,还有ios9和安卓5的用户。 然后我是用 这种方式做key,我们的页面有很多筛选条件,于是同一个接口就会存在很多个数据 image

lzlv312 avatar Jul 13 '22 09:07 lzlv312