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

關(guān)于eval 與new Function 到底該選哪個(gè)?

 更新時(shí)間:2013年04月17日 11:01:00   作者:  
本篇文章小編將為大家介紹,關(guān)于eval 與new Function 到底該選哪個(gè)?有需要的朋友可以參考一下

廢話不多說(shuō),直接上測(cè)試代碼

復(fù)制代碼 代碼如下:

var aa = "{name:'cola',item:[{age:11},{age:22},{age:23},{age:23}]}";
    var now = new Date().getTime();
    for (var i = 0; i < 100000; i++) {
        var a = eval("(" + aa + ")");

    }
    var now1 = new Date().getTime();
    document.write("eval 時(shí)間為:" + (now1 - now) + "<br/>");

 
    var now2 = new Date().getTime();
    for (var i = 0; i < 100000; i++) {
        var fn = new Function("return" + aa);
        fn();
    }
    var now3 = new Date().getTime();
    document.write("new Function時(shí)間為:" + (now3 - now2) + "<br/>");

        //經(jīng)過(guò)測(cè)試結(jié)果 FF效果如下
        //eval 時(shí)間為:979
        //new Function時(shí)間為:1372

        //經(jīng)過(guò)測(cè)試結(jié)果 IE8效果如下
        //eval 時(shí)間為:913
        //new Function時(shí)間為:1037

        //經(jīng)過(guò)測(cè)試結(jié)果 Chrome效果如下
        //eval 時(shí)間為:211
        //new Function時(shí)間為:251

        //經(jīng)過(guò)測(cè)試結(jié)果 Opera
        //eval 時(shí)間為:384
        //new Function時(shí)間為:1024

測(cè)試結(jié)果為不同瀏覽器測(cè)試的參考數(shù)據(jù),覺(jué)得奇怪的是為什么每個(gè)瀏覽器測(cè)試的時(shí)候都是eval要快點(diǎn),我們是不是要采用他呢?

親,先不要急, 接下往下看,帶著這些疑問(wèn),好奇心的我終于展開(kāi)了另外一個(gè)測(cè)試,這時(shí)候我做一個(gè)動(dòng)態(tài)涵數(shù)來(lái)分別讓eval 和 new Function 來(lái)執(zhí)行再看看效果

復(fù)制代碼 代碼如下:

var testEval = function (obj) {
         <SPAN style="COLOR: #ff0000"> return eval('0, ' + obj + '');</SPAN>
        //return eval('( ' + obj + ')');
      };

      var testFun = function (obj) {
          var fn = new Function("return " + obj);
          fn();
      };

      var now = new Date().getTime();
      for (var i = 0; i < 1000; i++) {
          var fn = testEval("function test(){ document.write('我有一頭小毛驢,從來(lái)也不騎.........'); }");
          fn();
      }
      var now1 = new Date().getTime();
      document.write("<br/>");
      document.write("eval 時(shí)間為:" + (now1 - now) + "<br/>");

      var now2 = new Date().getTime();
      for (var i = 0; i < 1000; i++) {
          testFun("document.write('我有一頭小毛驢,從來(lái)也不騎.........');");
      }
      var now3 = new Date().getTime();
      document.write("new Function時(shí)間為:" + (now3 - now2) + "<br/>");

  //經(jīng)過(guò)測(cè)試結(jié)果 FF效果如下
        //eval 時(shí)間為:495
        //new Function時(shí)間為:50

        //經(jīng)過(guò)測(cè)試結(jié)果 IE8效果如下
        //eval 時(shí)間為:34
        //new Function時(shí)間為:20

        //經(jīng)過(guò)測(cè)試結(jié)果 Chrome效果如下
        //eval 時(shí)間為:7
        //new Function時(shí)間為:4

        //經(jīng)過(guò)測(cè)試結(jié)果 Opera
        //eval 時(shí)間為:7
        //new Function時(shí)間為:18

        如上結(jié)果測(cè)試 如果構(gòu)建一個(gè)動(dòng)態(tài)執(zhí)行讓eval去執(zhí)行 在FF上是超級(jí)的慢, 其它瀏覽器差別不大, 我們這里不必過(guò)于太多追究
        return eval('0, ' + obj + ''); 可能大家覺(jué)得這里這個(gè) 0 是什么意思,加0主要是兼容所有的瀏覽器,不加的話,IE9以下版本就會(huì)報(bào)錯(cuò)
        但是真正的0的意思 怎么去剖析 我還真不知道,只是知道加 了這個(gè)就可以解決惡心的IE不能兼容的問(wèn)題
        經(jīng)過(guò)上面二個(gè)栗子說(shuō)明 如果是為了JSON串的轉(zhuǎn)換eval 明顯要快, 如果是動(dòng)態(tài)涵數(shù)解析 那么 new Function要快, 這里說(shuō)出了二個(gè)優(yōu)劣勢(shì), 還有的就是eval兼容性不很好,如果解析出錯(cuò),可能會(huì)導(dǎo)致其它的JS腳本不會(huì)執(zhí)行,
        而 后者則不會(huì),他只會(huì)針對(duì)于 這個(gè)Function  我這人不喜歡太麻煩的事情, 果斷放棄eval 用 new Function 來(lái)代替。 如果有理解的不太對(duì)的地方,請(qǐng)大家指正,歡迎拍磚。

相關(guān)文章

最新評(píng)論

湘阴县| 大理市| 澄城县| 乌鲁木齐县| 武胜县| 静海县| 司法| 庆城县| 油尖旺区| 图片| 乌兰浩特市| 页游| 温宿县| 永年县| 金堂县| 蕲春县| 九江市| 金阳县| 济阳县| 济源市| 锦州市| 定边县| 尼玛县| 蕉岭县| 夏河县| 夹江县| 佛教| 怀化市| 吐鲁番市| 永平县| 喀喇| 白山市| 当涂县| 陆河县| 马公市| 宜良县| 石河子市| 启东市| 尤溪县| 长宁区| 海宁市|