【发布时间】:2013-08-14 00:11:24
【问题描述】:
我本着 GoldenDict 的精神(www.goldendict.org,更多信息请参见 Google Play Store)编写了一个词典应用程序:http://tuxor1337.github.io/firedict 和 https://marketplace.firefox.com/app/firedict
由于 ffos 应用程序基于 HTML、CSS 和 JavaScript(WebAPI 等),我必须从头开始编写所有内容。一开始,我用 JavaScript 写了一个用于同步和异步访问 StarDict 字典的基本库:https://github.com/tuxor1337/stardict.js
虽然该应用程序现在可以称为稳定,但整体性能仍然有点迟钝。对于某些词典,我有一个包含近 1,000,000 个词条的单词列表!那是巨大的。索引需要很长时间(每个字典最多几分钟)和查找。目前,单词存储在 IndexedDB 对象存储中。还有其他选择吗?使用当前的解决方案(使用二进制搜索访问和插入的单词),整体体验非常缓慢。 也许它会变得更快,如果 IndexedDB 有一些语言环境排序支持... 实际上,我什至没有将术语本身存储在数据库中,而只是将它们的偏移量存储在 *.syn/* .idx 文件。我希望这样做可以节省一些内存。但当然,我无法在此配置中使用任何 IDB 排序功能...
也许在内存中进行排序不是最好的主意,因为现在由于某些设备(例如 ZTE Open)上的 OOM 导致应用程序被内核杀死。超过 500,000 个条目的字典肯定会超过 100 MB 的内存。 (每个条目只有 200 字节,如果您假设关键字字符串是 UTF-8,那么您将立即超过 100 MB...)
请随意直接为 GitHub 上的项目做出贡献。否则,我很乐意听取您对上述问题的建议。
【问题讨论】:
-
虽然这不能解决您的问题,但需要长期努力将基于区域设置的排序添加到 IDB。我们需要它用于其他 Firefox OS 应用程序。见这里:bugzilla.mozilla.org/show_bug.cgi?id=871846
-
见上文,我添加到问题中:我不能使用任何 IndexedDB 的排序功能,因为我不想将术语本身存储在数据库中,而只是(整数)引用存储在 StarDict 格式的 idx/syn 文件中的术语。
-
我已经在下面更新了我的答案,希望你看看。
标签: javascript data-structures firefox-os html5-apps