【发布时间】:2021-10-09 20:04:10
【问题描述】:
我正在为一种亚洲语言编写自定义键盘,并且我有一个包含超过 50 万个单词的单词数据库。我现在使用 Realm 并用它来提供单词建议。当用户键入前几个字母时,键盘将搜索数据库并根据赋予每个单词的优先级值提供单词。但这与 App Store 中的其他键盘相比似乎效率低下,我在这个问题上找不到任何具体的方法或想法。任何人都可以为我指明方向,以提高使用自定义 iOS 键盘进行单词搜索的效率。
我没有尝试过 CoreData,但一般来说,Realm 被认为比 CoreData 快。
【问题讨论】:
-
但这似乎效率低下 为什么?你有什么样的困难?问题也可能是效率低下或格式错误的代码,所以你能把它包括进去吗?例如有时我们会看到将领域对象转换为数组,这会降低它们的效率,但不知道你在做什么,这对我们来说纯粹是猜测。
-
@Jay Ok 主要问题就是这样。键盘并没有真正滞后,用户可以继续打字。但是建议栏似乎滞后,因为我需要一次又一次地读取数据库,并且它不会像 iOS 库存键盘或其他一些自定义键盘那样流畅地显示建议。实际上,我的键盘有 Unicode 和英文两种布局。对于英语,我使用带有
UITextChecker的 iOS 内部字典,并且在同一个自定义 UI 建议栏上显示建议非常快。问题出在我自己的字典/数据库上。 -
我目前只是用
BEGINSWITH做一个简单的查询,并在领域表上按priority排序。最终结果将被转换为数组,然后返回到键盘上显示。 -
最终结果将被转换为数组,这可能是问题所在,因为您可能会返回数百万个结果。我们有一个 2Gb 的数据库,我们正在从中提取数据,它的速度非常快,因为我们让 Realm 完成繁重的工作 - Realm 对象是延迟加载的,因此即使是大量存储的数据也会导致更小的内存占用 - 但是,将 Realm 对象保留在 Realm 集合中是关键。不过再一次 - 在不知道您的代码是什么/如何工作的情况下,我们只是在猜测。
-
我认为你是对的,我删除了数组,看起来更好。我还将单词表分成多个较小的表(对于每个起始字母),现在更好了,我对最终结果感到满意。感谢您的帮助
标签: swift performance realm custom-keyboard word-completion