<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JavaScript 上萬關(guān)鍵字瞬間匹配

        發(fā)一篇之前寫的文章,平時還是經(jīng)常用到的,尤其是河蟹詞特別多的聊天系統(tǒng)里。

        -------------------------------------------------

        提到關(guān)鍵字搜索,首先聯(lián)想到的無非就是使用一些indexOf,replace之類的字符函數(shù),最多加上一些正則表達式而已.實現(xiàn)起來雖然很簡單,但是這背后的效率問題可曾仔細考慮過?例如論壇中的關(guān)鍵字過濾,一般情況下需過濾的關(guān)鍵字數(shù)量及檢測的文本長度都不大,所以這一瞬間的過程沒有太多值得關(guān)注的地方。但若關(guān)鍵字數(shù)量不在是屈指可數(shù),而是有成千上萬, 并且待檢測的文本也是一長篇大論,結(jié)果可不再是那么樂觀了。大家都知道,每多一個關(guān)鍵字,就要增加一次全文的檢索,最終花費的時間將遠遠超出可接受的范圍內(nèi)。

        

        既然考慮的是那種極端的關(guān)鍵字搜索,通常的逐個遍歷搜索顯然是行不通的。如今用的是JavaScript,若不使用Hash表實在是太對不起這門語言了。有著對表特天獨厚的支持,不妨就拿出少量的空間來換取大量的時間吧。

        

        先看個例子,比如有如下的關(guān)鍵字: foo1,foo2,bar1,bar2,既然要用空間換時間,因此搜索之前先將他們預處理。前面提到了JS靈活又高效的表,顯而易見,使用樹的結(jié)構(gòu)是最有優(yōu)勢的。即使不明白,也沒關(guān)系,最終實現(xiàn)結(jié)構(gòu)正如如下的代碼,熟悉JSON同樣很親切:

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

        

        這一層層的結(jié)構(gòu)正如一棵樹,每個字符便是樹的一個分枝,到了最后一個字符便是樹葉,不再有新的節(jié)點。

        此時你應(yīng)該明白了,只要對文章的每個字沿著這棵樹往下搜就是了。能到達樹葉的,就說明當前字符就是關(guān)鍵字的一個;中途尋找不到對應(yīng)枝干的,當然就不是關(guān)鍵字。

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

        因此,整篇文章只需一次檢索,即可找出每個關(guān)鍵字的位置。

        由于JS的hash表性能非常高,所以所謂的尋找枝干也就非常的快了。因為JS的靈活性,實現(xiàn)此效果的代碼同樣很簡短。

        大家可以在我的空間里預覽:

        http://www.etherdream.com/funnyscript/Keyword/Keyword.html

        

        事實上可以發(fā)現(xiàn),關(guān)鍵字的數(shù)量與搜索的時間并沒太多的關(guān)系,那僅僅影響了樹的寬度而已,只有文章的長度才是決定搜索的時間。

        

        來一次極限測試:

        關(guān)鍵字: 成語全集(19830條)

        內(nèi)容:誅仙全集.txt (1659219字)

        用時:935ms

        (Chrome26 / i3-2312的CPU)


        160萬字的文章,匹配2萬個關(guān)鍵字,還不到1秒的時間。可見,充分利用JavaScript的靈活性,仍能發(fā)揮很大的潛力。

      posted @ 2013-04-17 10:45  EtherDream  閱讀(7643)  評論(22)    收藏  舉報
      主站蜘蛛池模板: 榆林市| 国产午夜精品理论大片| 国产亚洲精品一区二区不卡 | 国产精品户外野外| 欧美黑人粗暴多交高潮水最多| 精品人妻午夜福利一区二区| 亚洲欧美中文日韩V在线观看| 秋霞AV鲁丝片一区二区| 中文有码字幕日本第一页| 欧美特级午夜一区二区三区| 亚洲男人第一无码av网站| 丁香花在线影院观看在线播放| 亚洲无人区码一二三区别| 双乳奶水饱满少妇呻吟免费看| 国产一区二区三区美女| 欧美人与禽2o2o性论交| 日本深夜福利在线观看| 朝阳县| 成人免费无码大片a毛片| 亚洲深深色噜噜狠狠网站| 国内自拍第一区二区三区 | 国产成人无码免费视频在线| 丁香婷婷色综合激情五月| 丁香五月激情综合色婷婷| 精品一二三四区在线观看| 国产成年码av片在线观看 | 91国内精品久久精品一本| 无码福利写真片视频在线播放| 亚洲熟妇自偷自拍另类| 久久精品国产亚洲成人av| 欧美日韩国产图片区一区| 人妻无码中文专区久久app| 淮南市| 亚洲欧美日韩国产精品专区| 欧美偷窥清纯综合图区| 国产成人精品三级在线影院| 久久久久久久久18禁秘| 97人妻成人免费视频| 国产永久免费高清在线观看| 毛片网站在线观看| 亚洲av无码专区在线厂|