在将大量字符串与字典进行比较时(SOWPODS转换为JSON并通过开头字母拆分成文件),我在努力表现。
JSON文件当前存储在如下目录中:
words/
a.json
b.json
...
z.json
我的代码中的'test'
输入字符串会产生以下字符串数组。
[ 'test',
'tes',
'tet',
'te',
'tst',
'ts',
'tt',
't',
'est',
'es',
'et',
'e',
'st',
's',
'tets',
'tts',
'ets',
'tset',
'tse',
'set',
'se',
'tste',
'tte',
'ste',
'ttes',
'ttse',
'etst',
'ett',
'etts',
'estt',
'stt',
'stet',
'stte',
'sett' ]
要确定要读取哪些文件,我会通过字母表循环检查输入字符串('test'
)中存在哪些字母,例如:
var i;
['a', 'b', ..., 'z'].forEach(function(letter) {
i = input.indexOf(letter);
if(i !== -1) {
// letter exists, process [letter].json
// avoid reading the same file twice
input[i] = '';
}
});
上述示例的文件为t.json, e.json, s.json
。
上述示例的计算时间仅为~0.08s,但随着数组中的字符串数量和处理的文件数量的增加而迅速增加。
在看到这个例子时,您是否有任何直接的表现助推器?我应该使用数据库吗?是否通过错误的选择开始将JSON拆分为文件?欢迎所有答案!
感谢您阅读本文!
答案 0 :(得分:2)
嗯,是的,当然评估JSON文件会很慢。评估许多大型JSON文件的速度更慢。
您可以更好地查看HTML5网络数据库(http://docs.phonegap.com/en/edge/cordova_storage_storage.opendatabase.md.html)。据我所知,目前这只适用于Webkit浏览器,但它将及时全面实施。
作为替代方案,摆脱JSON以支持更容易解析的东西会稍微改善一些事情 - 但不要指望魔术结果。如果您要存储大量数据并进行查找,则需要一个真实的数据库。
更好的选择是摆脱所有客户端数据库逻辑,并使用AJAX调用服务器端的东西在那里的SQL数据库中查找。