cocos creator 在本地储存数据过大时,使用localStorage.setItem()储存会造成卡顿.
有什么好的解决方案嘛?
各位大佬!!!
过大指的是多大…
分批分段分时
数据过大也没啥好办法吧,要是每个数据是单独字段,一变化就修改,会好点吧
1M左右
这是要比游戏代码还要大呀
1M的数据进行读写也慢啊,分开存吧,不要图简单
这么大数据,原生和小游戏建议自己写文件,web无解
哈哈哈哈比较头疼
嗯嗯,正准备分开写了
在浏览器上跑速度还是很流畅的,就是手机上跑起来比较卡顿,准备分开写了
本地数据存储确实在会导致掉帧,可以在游戏局内使用变量存储,在游戏进入后台或者某种情况下存储
我现在做的这个游戏需要进行实时储存,所以比较头疼,准备把数据分开来写入了
其实如果你每帧都进行存储的话,不管你分开还是一起,只要调用localStorage.setItem()进行存储,哪怕只有一个字符也会卡的
不是每一帧都储存,就是进行一个操作需要储存一次
初始页面读到缓存变量里,只修改读取缓存变量的值,在各个退出节点再将缓存数据存到本地
之前也是这么做得,就是担心用户中途退出游戏
可以在onhide中监听存储,
谢谢 我发现用这个也能达到我要的效果
原生端localStorage
的实现是sqlite,并且读写操作都是从渲染线程里同步阻塞调用,容易导致渲染线程掉帧。
在不调整业务代码的情况下可以考虑
- 把写操作分发到工作线程执行
- 读操作仍然保持同步阻塞调用,为了保证一致性在工作线程和写操作串行执行
我的项目里数据只在游戏启动时做一次读,运行时只有写,所以这种小改动能满足我的场景。
代码在附件里。
— 20200917 20:43
之前没注意把修改前的代码发上来了,已经更新
Cocos2dxLocalStorage.zip (2.5 KB)
3赞