Javascript成千上万的关键字来匹配代码瞬间。
当谈到关键字搜索,联想到的第一件事就是用一些指标,更换和其他字符的功能,再加上一些正则表达式。虽然实现起来很简单,但效率却被仔细考虑了吗例如,关键词过滤在论坛,一般来说,关键词过滤的数量和文本的长度来检测并不大,所以没有过多的关注这一瞬间。然而,如果关键词的数量是不够的,有成千上万的人,但也有成千上万的人,和被测试的文字也是一个很长的故事,其结果是不乐观的。大家都知道,每一个更多的关键词将被添加到全文检索,并最终成本将远远超出可接受的范围内。U3000 U3000
由于考虑了这种极端关键字搜索,通常遍历的搜索显然是不可行的。现在它是Javascript,如果不使用哈希表,对这种语言很抱歉。在特殊的日子的支持下,您可能会占用大量时间的少量空间。
U3000 U3000
例如,在一个例子,先看看,以下关键词:匹配foo1,Foo2,bar1,2,因为我们需要改变的时间与空间,我们将预处理过的搜索。如JS的灵活和高效的桌子前,很明显,树的结构是最有利的。即使你不明白,没关系,最终的结构是类似下面的代码,并熟悉JSON也很友好:
复制代码代码如下所示:
VaR的根
{
F:
{
o:
{
o:
{
真正的,
:真的
}
}
},
B:
{
一个:
{
R:
{
真正的,
:真的
}
}
}
};
这一层结构就像一棵树,每一个字符都是一棵树的分枝,而最后一个字符是一个叶子,不再是一个新的节点。
在这一点上,你应该理解,只要文章的每一个字都在树上搜索,到达叶子,就意味着当前的字符是关键词之一,在中间找不到相应的分支不是关键词。
例如,访问了根匹配foo1,结构,最终到达根{ F } { } { O O } { 1},即匹配完成。然后跳过匹配foo1长度和继续找回它。
因此,整个文章只需要检索一次,并且可以找到每个关键字的位置。
由于JS哈希表的高性能,所谓的分支搜索速度非常快,因为js的灵活性,实现这种效果的代码也很短。
U3000 U3000
事实上,可以发现关键字的数量与搜索时间无关。这只会影响树的宽度。只有文章的长度决定了搜索的时间。
U3000 U3000
极限试验:
关键词:成语全集(19830)
内容:朱贤完成txt(1659219个字)
使用时间:935ms
(chrome26 / i3-2312 CPU)
文章的16万个字,匹配了2万个关键词,不到一秒钟的时间,可以看出,充分利用javascript的灵活性仍然可以发挥很大的潜力。