eval不仅仅是效率的问题少用的...效率只是一个方面...尽量少用~

解决方案 »

  1.   

    1万次应该没什么太大的区别.
    经过eval之后,里面的串已经被 JScript 分析器进行分析和执行了.
    而是否经过eval来处理,则仅仅是多了一步是直接由jscript分析器来处理,还是将字符串作为源代码来动态执行。
    其他见解继续...
      

  2.   

    同意楼上的,JavaScript本身都是文本,本身就是晚期绑定机制,eval只是你晚期注入一段代码,效率偏差应该不大。
      

  3.   

    没有区别。因为两种情况的test()方法都是在全局闭包空间的。注意,如果test()在全局闭包空间,而eval被放在一个函数内执行,那么eval的效率要低些(js的作用域链起作用,js总是先在局部去找变量或方法,局部没有再去上一层左右空间找,一直到全局空间)。
      

  4.   

    时间太短,时间加大,看看区别在哪里 呵呵
    test
    <script> 
    var d= new Date().getTime()
    eval("function test(){}"); 
    </script> 
    <script> 
    //这里开始进行1万次test方法调用. 
    for(var i=0;i <100000;i++){ 
    test(); 

    var d2 = new Date().getTime();
    alert(d2-d);
    </script> <script> 
    var d3= new Date().getTime();
    function test(){} 
    </script> 
    <script> 
    //这里开始进行1万次test方法调用. 
    for(var i=0;i <100000;i++){ 
    test(); 

    var d4= new Date().getTime();
    alert(d4-d3);</script>
      

  5.   


    eval 及 json赋值的性能测试
    代码:
    <script>
    var n=200000;
    function test(){
        var s;
        var t1=(new Date()).getTime();
        for(var i=0;i<n;i++)
            s=1000*1000/1000;
        var t2=(new Date()).getTime();
        return (t2-t1);
    }
    function evaltest(){
        var s;
        var t1=(new Date()).getTime();
        for(var i=0;i<n;i++)
            eval("s=1000*1000/1000;");
        var t2=(new Date()).getTime();
        return (t2-t1);
    }
    function jsontest(){
        var s;
        var t1=(new Date()).getTime();
        for(var i=0;i<n;i++)
            s={"DataCount":5000,"jsonRoot":[{"title":"标题","staff":{"UserName":"test","Age":20},"id":2}]};
        var t2=(new Date()).getTime();
        return (t2-t1);
    }
    function jsonevaltest(){
        var s;
        var t1=(new Date()).getTime();
        for(var i=0;i<n;i++)
            eval('s={"DataCount":5000,"jsonRoot":[{"title":"标题","staff":{"UserName":"test","Age":20},"id":2}]};');
        var t2=(new Date()).getTime();
        return (t2-t1);
    }
    document.write ("<br>算术运算测试(正常):"+test()+" 毫秒");
    document.write ("<br>算术运算测试(eval):"+evaltest()+" 毫秒<br>");
    document.write ("<br>JSON赋值测试(正常):"+jsontest()+" 毫秒");
    document.write ("<br>JSON赋值测试(eval):"+jsonevaltest()+" 毫秒");
    </script>在 Athlon64 3000+ IE6 上运行结果:算术运算测试(正常):121 毫秒
    算术运算测试(eval):1969 毫秒JSON赋值测试(正常):1906 毫秒
    JSON赋值测试(eval):4922 毫秒 
    UID2119 帖子5 精华0 积分75 阅读权限1 在线时间7 小时 注册时间2007-11-8 最后登录2007-12-8 查看详细资料
     TOP 
     
    P4 2.6c  ,ie6算术运算测试(正常):141 毫秒
    算术运算测试(eval):3953 毫秒JSON赋值测试(正常):3891 毫秒
    JSON赋值测试(eval):9343 毫秒 
      

  6.   


    同意!<input type="text" id="a" value="0">
    <input type="text" id="b" value="0"><script>
    var aT = new Date();
    for(var i=0;i <10000;i++){
    eval("function test1(){document.getElementById('a').value++}");
    test1();
    }
    document.getElementById('a').value += ","+(new Date()-aT);var bT = new Date();
    for(var i=0;i <10000;i++){
    function test(){document.getElementById('b').value++}
    test();
    }
    document.getElementById('b').value += ","+(new Date()-bT);
    </script>
      

  7.   

    eval 效率肯定差多了,  因为它没执行一次都有重新调用JavaScript解释器, 解析一次, 如果代码多的话就很明显了
      

  8.   


    为什么看到的javascript很多文件都是eval(function(){ 。})这样写的啊。