Code Monkey home page Code Monkey logo

Comments (13)

JOU-amjs avatar JOU-amjs commented on August 25, 2024 1

[email protected]已经更新,在这个版本中解决了你需要异步获取缓存的问题,我们在考虑解决异步缓存问题的时候,并没有简单地把全局的storageAdapater更改为支持异步函数,这会让alova的其他函数比如setCacheinvalidateCacheupdateState等变得不可用,同时正式场景下也不需要所有请求都支持异步缓存,因此在2.1.0中添加了受控缓存的功能来支持,同时把更复杂缓存的控制权交还给用户。

大致的用法就是在创建method实例时,将localCache参数指定为一个异步函数,在这个异步函数中返回自定义的缓存数据,然后就会将返回的数据当做命中的缓存来使用,具体的用法你可以看这边https://alova.js.org/zh-CN/next-step/controlled-cache

from alova.

huluobotx avatar huluobotx commented on August 25, 2024 1

[email protected]已经更新,在这个版本中解决了你需要异步获取缓存的问题,我们在考虑解决异步缓存问题的时候,并没有简单地把全局的storageAdapater更改为支持异步函数,这会让alova的其他函数比如setCacheinvalidateCacheupdateState等变得不可用,同时正式场景下也不需要所有请求都支持异步缓存,因此在2.1.0中添加了受控缓存的功能来支持,同时把更复杂缓存的控制权交还给用户。

大致的用法就是在创建method实例时,将localCache参数指定为一个异步函数,在这个异步函数中返回自定义的缓存数据,然后就会将返回的数据当做命中的缓存来使用,具体的用法你可以看这边https://alova.js.org/zh-CN/next-step/controlled-cache

谢谢😃,这个方案下,可以通过localStorage异步获取缓存,我还想问一下,
设置缓存可以在我第一次获取数据的时候,也可以在storageAdapater中,storageAdapater可以设置异步缓存,获取异步缓存才报了错,我应该如何选择,
异步缓存失效我想可以在缓存数据中加入时间戳,定期删除超时缓存。

from alova.

huluobotx avatar huluobotx commented on August 25, 2024 1

这次新增的受控缓存其实就是把更复杂的缓存需求交还给你,根据你的需求,我建议这样做:

  1. 第一次获取数据时,会发起请求获取文件数据,这个时候可以在获取文件的method实例(下面就称为实例A)的transformData中执行保存操作(transformData也支持异步函数),比如可以使用文件路径作为key,保存缓存时一起设置一个过期时间
  2. 在实例中设置localCache为异步函数获取指定文件的缓存,如果存在并且未过期则返回它,如果已过期则删除缓存并返回undefined,返回undefined表示不使用缓存,会继续发起请求。

这样的话,应该是可以解决你的问题。 关于transformData的使用可以看这边哦 https://alova.js.org/zh-CN/response-data-management/transform-response-data

谢谢😃,可以满足我的需求,我才发现上面的提问有的地方写错了,才造成了你的误解,最开始提问的localForage写成了localStorage,上一个中的localCache也写成了localStorage,非常感谢,我此前也有类似想法,觉得可以用Service Worker去实现,Alova的实现思路让我看到了一个新大门

from alova.

JOU-amjs avatar JOU-amjs commented on August 25, 2024 1

😁我后面理解了你的意思,不用谢,你也是在帮助改善alova。

from alova.

JOU-amjs avatar JOU-amjs commented on August 25, 2024

alova默认使用的存储适配器就是localStorage,它的api是同步的,如果你要使用localStorage的话,可以不设置存储适配器

from alova.

huluobotx avatar huluobotx commented on August 25, 2024

我希望使用indexDB,我有文件类的数据需要存储在indexDB中,我的场景是一个在线网盘,需要频繁获取文件夹中的文件,而且需要预览,希望alova存储适配器可以支持异步api

from alova.

JOU-amjs avatar JOU-amjs commented on August 25, 2024

我可以再深入了解下你的项目需求吗?我有几个问题:

  1. 获取文件这部分需求具体如何的?(我猜想:首次打开文件需要请求后预览,后续再次打开就直接取本地缓存,是这样的吗?)
  2. 项目中是不是只有部分请求会用到异步存储呢?比如只有在获取文件这个请求中?
  3. 请求文件时,响应数据以什么方式请求的?是直接一个blob二进制流吗?

from alova.

huluobotx avatar huluobotx commented on August 25, 2024

我可以再深入了解下你的项目需求吗?我有几个问题:

  1. 获取文件这部分需求具体如何的?(我猜想:首次打开文件需要请求后预览,后续再次打开就直接取本地缓存,是这样的吗?)
  2. 项目中是不是只有部分请求会用到异步存储呢?比如只有在获取文件这个请求中?
  3. 请求文件时,响应数据以什么方式请求的?是直接一个blob二进制流吗?

这个项目里文件存储和文件组织数据是分离的,文件组织信息中包括了文件的存储地址,
获取文件组织信息用了useRequest内存模式缓存,
当用户要预览文件时,会从文件的存储地址中异步读取二进制流,根据文件类型预览,
这个时候希望可以使用Alova请求restore模式缓存在indexDB中,下一次预览就不需要从服务器请求

from alova.

JOU-amjs avatar JOU-amjs commented on August 25, 2024

那文件的缓存时长是如何的,是固定的还是动态的?以及,如果文件在其他地方修改了,用户那边可能还有缓存,你期望这里的效果是要怎样的?

from alova.

huluobotx avatar huluobotx commented on August 25, 2024

那文件的缓存时长是如何的,是固定的还是动态的?以及,如果文件在其他地方修改了,用户那边可能还有缓存,你期望这里的效果是要怎样的?

缓存时长我希望设置成30天,每次读取缓存后,更新这个时间,超过30天没有读取这个缓存就自动删除掉。
如果另一个用户在其他地方修改文件,也只能修改文件的组织信息或自身信息,比如所在文件夹,文件名,而存储地址和hash值不会变,不会影响到缓存的key,另一个用户可以删除文件,所以希望超过一定时间没有访问的缓存自动可以删除。

from alova.

JOU-amjs avatar JOU-amjs commented on August 25, 2024

明白了,这两天我考虑下改进方案,感谢你的反馈哦😃

from alova.

huluobotx avatar huluobotx commented on August 25, 2024

明白了,这两天我考虑下改进方案,感谢你的反馈哦😃

谢谢😃

from alova.

JOU-amjs avatar JOU-amjs commented on August 25, 2024

这次新增的受控缓存其实就是把更复杂的缓存需求交还给你,根据你的需求,我建议这样做:

  1. 第一次获取数据时,会发起请求获取文件数据,这个时候可以在获取文件的method实例(下面就称为实例A)的transformData中执行保存操作(transformData也支持异步函数),比如可以使用文件路径作为key,保存缓存时一起设置一个过期时间
  2. 在实例中设置localCache为异步函数获取指定文件的缓存,如果存在并且未过期则返回它,如果已过期则删除缓存并返回undefined,返回undefined表示不使用缓存,会继续发起请求。

这样的话,应该是可以解决你的问题。
关于transformData的使用可以看这边哦 https://alova.js.org/zh-CN/response-data-management/transform-response-data

from alova.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.