现在有个场景,后端通过webscoket往前端推数据,前端拿到数据后存储到indexdb中。但是如果webscoket一直不停的推,前端数据库的查询就会卡住,这是什么原因呢?是因为indexdb插入操作的时候表上锁无法执行查询操作吗?
现在有个场景,后端通过webscoket往前端推数据,前端拿到数据后存储到indexdb中。但是如果webscoket一直不停的推,前端数据库的查询就会卡住,这是什么原因呢?是因为indexdb插入操作的时候表上锁无法执行查询操作吗?
可以看一下我这篇文章:https://segmentfault.com/a/11...
卡主的原因就是因为没有做异步任务列队。因为第一个数据还未插入,第二个数据就来了。越来越多的插入操作累计导致数据写入阻塞。解决办法就是不管多少个数据,我让你插入完成一条再插入另一条。websocket数据过来了。把他压入列队内,不管多少个。就相当于有个中间区域做缓冲。不会一下塞进去。
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
用队列解决配合Promise.all
目前从你描述可以得知,是操作频繁导致性能出现问题。这时候需要一个队列来处理,这个队列来存储数据,当数据存在一定值时,批量操作,由于indexDB是一个异步的操作,可以封装用promise进行封装操作。目前也有对indexDB的ORM