数据过大时,使用localStorage.setItem()储存卡顿

cocos creator 在本地储存数据过大时,使用localStorage.setItem()储存会造成卡顿.
有什么好的解决方案嘛?
各位大佬!!!

过大指的是多大… :open_mouth:

分批分段分时

数据过大也没啥好办法吧,要是每个数据是单独字段,一变化就修改,会好点吧

1M左右:joy:

这是要比游戏代码还要大呀

1M的数据进行读写也慢啊,分开存吧,不要图简单

这么大数据,原生和小游戏建议自己写文件,web无解

:joy::joy::joy:哈哈哈哈比较头疼

嗯嗯,正准备分开写了

在浏览器上跑速度还是很流畅的,就是手机上跑起来比较卡顿,准备分开写了

本地数据存储确实在会导致掉帧,可以在游戏局内使用变量存储,在游戏进入后台或者某种情况下存储

我现在做的这个游戏需要进行实时储存,所以比较头疼,准备把数据分开来写入了

其实如果你每帧都进行存储的话,不管你分开还是一起,只要调用localStorage.setItem()进行存储,哪怕只有一个字符也会卡的

不是每一帧都储存,就是进行一个操作需要储存一次

初始页面读到缓存变量里,只修改读取缓存变量的值,在各个退出节点再将缓存数据存到本地

:joy::joy::joy:之前也是这么做得,就是担心用户中途退出游戏

可以在onhide中监听存储,

谢谢 我发现用这个也能达到我要的效果

原生端localStorage 的实现是sqlite,并且读写操作都是从渲染线程里同步阻塞调用,容易导致渲染线程掉帧。

在不调整业务代码的情况下可以考虑

  1. 把写操作分发到工作线程执行
  2. 读操作仍然保持同步阻塞调用,为了保证一致性在工作线程和写操作串行执行

我的项目里数据只在游戏启动时做一次读,运行时只有写,所以这种小改动能满足我的场景。
代码在附件里。

— 20200917 20:43
之前没注意把修改前的代码发上来了,已经更新

Cocos2dxLocalStorage.zip (2.5 KB)

3赞