麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript 上萬關鍵字瞬間匹配實現代碼

2019-11-20 22:33:43
字體:
來源:轉載
供稿:網友
提到關鍵字搜索,首先聯想到的無非就是使用一些indexOf,replace之類的字符函數,最多加上一些正則表達式而已.實現起來雖然很簡單,但是這背后的效率問題可曾仔細考慮過?例如論壇中的關鍵字過濾,一般情況下需過濾的關鍵字數量及檢測的文本長度都不大,所以這一瞬間的過程沒有太多值得關注的地方。但若關鍵字數量不在是屈指可數,而是有成千上萬, 并且待檢測的文本也是一長篇大論,結果可不再是那么樂觀了。大家都知道,每多一個關鍵字,就要增加一次全文的檢索,最終花費的時間將遠遠超出可接受的范圍內。
  
  既然考慮的是那種極端的關鍵字搜索,通常的逐個遍歷搜索顯然是行不通的。如今用的是JavaScript,若不使用Hash表實在是太對不起這門語言了。有著對表特天獨厚的支持,不妨就拿出少量的空間來換取大量的時間吧。
  
  先看個例子,比如有如下的關鍵字: foo1,foo2,bar1,bar2,既然要用空間換時間,因此搜索之前先將他們預處理。前面提到了JS靈活又高效的表,顯而易見,使用樹的結構是最有優勢的。即使不明白,也沒關系,最終實現結構正如如下的代碼,熟悉JSON同樣很親切:
復制代碼 代碼如下:

var Root =
{
    f:
    {
        o:
        {
            o:
            {
: true,
: true
            }
        }
    },
    b:
    {
        a:
        {
             r:
            {
: true,
: true
            }
        }
    }
};


這一層層的結構正如一棵樹,每個字符便是樹的一個分枝,到了最后一個字符便是樹葉,不再有新的節點。
  此時你應該明白了,只要對文章的每個字沿著這棵樹往下搜就是了。能到達樹葉的,就說明當前字符就是關鍵字的一個;中途尋找不到對應枝干的,當然就不是關鍵字。

  例如foo1,順著Root結構向下訪問,最終到達Root['f']['o']['o']['1'],即完成了一次匹配。之后跳過foo1的長度,繼續往后檢索。

  因此,整篇文章只需一次檢索,即可找出每個關鍵字的位置。
  由于JS的hash表性能非常高,所以所謂的尋找枝干也就非常的快了。因為JS的靈活性,實現此效果的代碼同樣很簡短。
  
  事實上可以發現,關鍵字的數量與搜索的時間并沒太多的關系,那僅僅影響了樹的寬度而已,只有文章的長度才是決定搜索的時間。
  
  來一次極限測試:
  關鍵字: 成語全集(19830條)
  內容:誅仙全集.txt (1659219字)
  用時:935ms
  (Chrome26 / i3-2312的CPU)
160萬字的文章,匹配2萬個關鍵字,還不到1秒的時間。可見,充分利用JavaScript的靈活性,仍能發揮很大的潛力。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 经典三级av在线 | 天天操天天骑 | 亚洲一区二区 | 精品久久久久久久久久久久久 | 国产一区二区久久精品 | 久久久99精品视频 | 欧美一级电影网站 | 亚洲欧美日韩中文在线 | 亚洲男人的天堂在线视频 | 九九热免费视频在线观看 | 美女性感毛片 | 久久99国产精品久久99果冻传媒 | 天天干干 | 色播视频在线播放 | 午夜激情视频网站 | 欧美a欧美| 久久久裸体视频 | 亚洲天堂在线电影 | 伊人午夜视频 | 免费观看三级毛片 | 黄色片在线免费播放 | 国产亚洲欧美日韩高清 | 精品一区二区三区毛片 | 婷婷一区二区三区四区 | 国产美女三级做爰 | 精品国产一区二区三区久久久蜜月 | 日日草视频 | 成人毛片100部免费观看 | 在线a亚洲视频播放在线观看 | 国产精品久久久久久久不卡 | 91懂色 | 中文字幕视频在线播放 | 羞羞视频一区二区 | 国产一区精品在线观看 | 2021国产精品视频 | 免费人成年短视频在线观看网站 | fc2国产成人免费视频 | 亚洲视频在线观看免费视频 | 中文字幕一区2区 | 污视频在线看 | 久章草在线视频 |