最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談js正則字面量//與new RegExp的執(zhí)行效率

 更新時(shí)間:2020年04月08日 22:35:38   作者:樓教主  
以前看到很多文章都說 字面量 會(huì)比 new 對(duì)象 形式效率高,但是在正則這里,好像不是這么回事,具體的請(qǐng)看下面的分析

前幾天談了正則匹配 js 字符串的問題:《js 正則學(xué)習(xí)小記之匹配字符串》 和 《js 正則學(xué)習(xí)小記之匹配字符串優(yōu)化篇》。
里面講到了優(yōu)化正則起到提升性能的問題,但是能提升多少呢?
于是我去測(cè)試了,發(fā)現(xiàn)TMD幾乎微乎其微,我用1千字符串進(jìn)行100萬次匹配測(cè)試,優(yōu)不優(yōu)化根本沒區(qū)別。

這不科學(xué),我白看了這么多天正則,上天這是在玩弄我么。

突然我想到了 compile 方法,然后去測(cè)試了下,奇跡出現(xiàn)了,果然優(yōu)化過的快了不少。

但這是為什么呢?
于是我翻閱資料,在 MDN 上找到了 RegExp Methods
這里說 compile 方法已被棄用!這不科學(xué)。。。
在 stackoverflow 上發(fā)現(xiàn)這篇文章 Javascript: what's the point of RegExp.compile()? 
文章大意是說其實(shí) 直接 new RegExp 即可,compile 幾乎用不到。
于是乎我修改了代碼再來一次。

果然,直接 new RegExp 效果和 compile 是一樣的。
不過這只是 nodejs 下的結(jié)果,我們?nèi)タ纯锤鱾€(gè)瀏覽器下的結(jié)果如何吧。

<!doctype html>
<html lang="en"> 
<head>
 <meta charset="UTF-8">
 <title>test</title>
</head>
 
<body>
 <script>
  var str1 = '"' + Array(100).join("x") + '123456\\\'78\\\"90"';
  var str2 = '"' + Array(100).join("x") + 'ooo\\\\oooo\\\nxxxx\\\"xxxx"';
   // 這里寫100,小一點(diǎn),防止等半天,F(xiàn)F那慫貨就半天
  console.log("字符串1:", str1);
  console.log("字符串2:", str2);
 
  var reg1 = /"(?:\\.|[^"])*"/;
  var reg2 = /"(?:[^"\\]|\\[\d\D])*"/;
 
  var reg11 = new RegExp('"(?:\\.|[^"])*"');
  var reg22 = new RegExp('"(?:[^"\\]|\\[\d\D])*"');
 
  var n = 1e6; //100萬次測(cè)試
 
  test("reg1", reg1);
  test("reg2", reg2);
  test("reg11", reg11);
  test("reg22", reg22);
 
  function test(name, re) {
   console.time(name);
   for (var i = 0; i < n; i++) {
    str1.match(re);
    str2.match(re);
   }
   console.timeEnd(name);
  }
 </script>
</body> 
</html>


chrome


firefox


IE11


IE8 (我調(diào)用了一個(gè)插件模擬控制臺(tái)實(shí)現(xiàn)IE6-8調(diào)試輸出的)

很明顯,第一名是 chrome (以 reg22 那個(gè)優(yōu)化過的為準(zhǔn)),這個(gè)號(hào)稱武裝到牙齒的貨,果然夠new逼。
不過 firefox 這貨,竟然連 IE8 都比不過,是不是太慫了點(diǎn)。

優(yōu)化過的 正則 比沒優(yōu)化的快,那是肯定的。
但是 正則字面量 和 new RegExp 比,那就不是一個(gè)檔次了。
為什么有如此大的差距呢?
其實(shí)我也沒搞清楚。

以前看到很多文章都說 字面量 會(huì)比 new 對(duì)象 形式效率高,但是在正則這里,好像不是這么回事。
不過也不能直接否認(rèn)這個(gè)觀點(diǎn),因?yàn)槲乙恢倍加米置媪康模?jiǎn)潔美觀,用著方便才是王道。

我覺得在數(shù)據(jù)量大,或者重復(fù)操作次數(shù)多的時(shí)候用 new RegExp 是很必要的。
因?yàn)槟阋部吹搅诵阅芴嵘@么多。
當(dāng)然前提條件是你的正則必須優(yōu)化,正則沒優(yōu)化的情況,兩種差不多。
所以優(yōu)化你的正則,然后用 new RegExp 可以大幅度提升程序的性能。

PS: IE11 是個(gè)特例,這貨從來不安套路出牌。

好了今天的分享完畢,你們都蠢蠢欲動(dòng)了吧,快去把正則各種new起來吧。

相關(guān)文章

  • 正則表達(dá)式匹配路由的實(shí)現(xiàn)代碼

    正則表達(dá)式匹配路由的實(shí)現(xiàn)代碼

    這篇文章主要介紹了正則表達(dá)式匹配路由的實(shí)現(xiàn)代碼,代碼也很簡(jiǎn)單,感興趣的朋友參考下本文
    2018-07-07
  • 關(guān)于正則表達(dá)式基本語法的應(yīng)用詳解(必看篇)

    關(guān)于正則表達(dá)式基本語法的應(yīng)用詳解(必看篇)

    下面小編就為大家?guī)硪黄P(guān)于正則表達(dá)式基本語法的應(yīng)用詳解(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 手機(jī)號(hào)碼驗(yàn)證方法(正則驗(yàn)證)

    手機(jī)號(hào)碼驗(yàn)證方法(正則驗(yàn)證)

    這篇文章主要介紹了手機(jī)號(hào)碼驗(yàn)證方法(正則驗(yàn)證),在文章中還給大家補(bǔ)充了最新手機(jī)號(hào)的驗(yàn)證正則表達(dá)式,需要的朋友可以參考下
    2017-02-02
  • 學(xué)習(xí)正則!超基礎(chǔ)簡(jiǎn)單例子

    學(xué)習(xí)正則!超基礎(chǔ)簡(jiǎn)單例子

    我一直都覺得正則表達(dá)式只要在要用的時(shí)候翻一下百度就Ok了,然后今天寫php的時(shí)候發(fā)現(xiàn),原來我正則完全一點(diǎn)都不懂
    2012-09-09
  • 一文教會(huì)你用正則表達(dá)式校驗(yàn)日期時(shí)間格式

    一文教會(huì)你用正則表達(dá)式校驗(yàn)日期時(shí)間格式

    日期的格式多種多樣,有如:"yyyy-MM-dd HH:mm:ss"、"yyyy/MM/dd HH:mm:ss"、"yyyyMMdd HH:mm:ss"等,當(dāng)然也有的只記錄到天,下面這篇文章主要給大家介紹了關(guān)于用正則表達(dá)式校驗(yàn)日期時(shí)間格式的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 利用正則表達(dá)式校驗(yàn)金額最多保留兩位小數(shù)實(shí)例代碼

    利用正則表達(dá)式校驗(yàn)金額最多保留兩位小數(shù)實(shí)例代碼

    很多不太懂正則的朋友,在遇到需要用正則校驗(yàn)數(shù)據(jù)時(shí),往往是在網(wǎng)上去找很久,結(jié)果找來的還是不很符合要求,下面這篇文章主要給大家介紹了關(guān)于利用正則表達(dá)式校驗(yàn)金額最多保留兩位小數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 常用的正則表達(dá)式集錦

    常用的正則表達(dá)式集錦

    今天我將分別用PHP和Javascript向大家介紹WEB開發(fā)中最常用最實(shí)用的正則表達(dá)式及其用法,正則表達(dá)式是一門學(xué)科,不可能使用一篇文章來講解完,理論的東西網(wǎng)上很多,有興趣的同學(xué)可以搜一大把。
    2014-09-09
  • JAVA中正則表達(dá)式小總結(jié)(整理)

    JAVA中正則表達(dá)式小總結(jié)(整理)

    昨天,有朋友請(qǐng)教我關(guān)于正則表達(dá)式的問題,就這點(diǎn)問題當(dāng)時(shí)也真是把我難住了,無奈不得不學(xué)習(xí)了,于是到搜了寫相關(guān)資料,為了加深了印象,現(xiàn)把相關(guān)內(nèi)容整理如下,供大家參考學(xué)習(xí)
    2015-09-09
  • 學(xué)會(huì)Python正則表達(dá)式,就看這20個(gè)例子(腳本之家修正版)

    學(xué)會(huì)Python正則表達(dá)式,就看這20個(gè)例子(腳本之家修正版)

    這篇文章主要介紹了學(xué)會(huì)Python正則表達(dá)式,就看這20個(gè)例子,需要的朋友可以參考下
    2020-03-03
  • 檢查素?cái)?shù)的正則表達(dá)式分享

    檢查素?cái)?shù)的正則表達(dá)式分享

    一般來說,我們會(huì)使用正規(guī)表達(dá)式來做字符串匹配,今天在網(wǎng)上瀏覽的時(shí)候,看到了有人用正則表達(dá)式來檢查一個(gè)數(shù)字是否為素?cái)?shù)(質(zhì)數(shù)),讓我非常感興趣
    2011-08-08

最新評(píng)論

巫山县| 郴州市| 准格尔旗| 茶陵县| 资中县| 深圳市| 泸西县| 平舆县| 黄冈市| 佛学| 个旧市| 平江县| 岫岩| 小金县| 承德市| 蕉岭县| 高陵县| 云和县| 靖江市| 云南省| 万盛区| 西丰县| 绍兴县| 建瓯市| 宁武县| 呼伦贝尔市| 靖边县| 阿克陶县| 新竹市| 大姚县| 庄河市| 沙雅县| 屏山县| 衡山县| 青州市| 钟祥市| 古交市| 上思县| 安溪县| 手机| 礼泉县|