我创建了一个应用程序,用于存储,比较,过滤和从记录集合中获取统计信息。我已经完成了它,因此它可以脱机工作,因为在某些用户案例中,用户可能没有持续(或根本)访问互联网。
我的问题是,在我收录了大约60条记录之后,该应用开始表现为真的慢。例如,我将一组简单对象从LocalStorage列入一个ng-model(选择列表),在那些~60条记录进入后,打开选择框将会严重减慢。
问题是什么?我想,要么某些功能吸收的资源多于必要的资源,要么LocalStorage不适用于此类用途?
我开始进入PouchDB,你会说将所有内容迁移到Pouch而不是LocalStorage是一个很好的举措吗?
我无法将整个控制器粘贴到这里,因为它很大,但我已经在线版本进行测试。你可以看到它here。
为了不必创建60条记录来查看效果,您可以download this CSV将其导入应用程序。
要导入,编辑模式的通道为: admin
让我们看看是否有人有这个提示!
答案 0 :(得分:1)
我看到您将所有记录存储在单个LocalStorage值中(密钥为recordspax
)。所以是的,这会变得非常慢,因为你的应用必须1)JSON解析/字符串化,2)每次你读/写数据到数据库时存储/检索整个列表。
基本上,您正在为每个操作读取磁盘的整个数据库。由于LocalStorage和JSON stringify / parse同时在主线程上发生,它可以阻止DOM渲染,从而减慢你的应用程序。
PouchDB可以在这里提供帮助,但您也可以从像LocalForage这样简单的东西中受益,或者只是更改数据库设计,以便每条记录都有自己的键/值,而不是将所有内容存储到一个键中一个单一的价值。
(LocalForage和PouchDB都使用IndexedDB / WebSQL而不是LocalStorage,这意味着数据库操作不是同步的并且不会阻止DOM。但是,您仍然不希望将所有内容都填充到单个文档中,因此读取整个数据库进出磁盘。:))