代码之家  ›  专栏  ›  技术社区  ›  jyoseph

在每次迭代中追加到DOM,还是创建一个数组和输出?

  •  0
  • jyoseph  · 技术社区  · 15 年前

    我张贴 a question yesterday 处理解析JSON数据。在其中一个后续回答中,有人说我在每次迭代中使用jquery append()函数,同时使用每个()会影响性能。

    我在做:

    $.getJSON("http://myurl.com/json?callback=?", 
      function(data) {        
    
      // loop through each post 
      $.each(data.posts, function(i,posts){ 
    
        ... parsing ...
    
        // append
        $('ul').append('<li>...</li>');
    
      }); 
    
     });
    

    我修改为:

    $.getJSON("http://myurl.com/json?callback=?", 
      function(data) { 
    
         // create array
         arrPosts = new Array(); 
    
          // loop through each post
          $.each(data.posts, function(i,posts){ 
    
           ... parsing ...
    
            arrPosts[i] = '<li> ... </li>'; 
    
          });           
    
          // output
          for (i=0;i<arrPosts.length;i++){ 
            $('ul').append(arrPosts[i]); 
          } 
    
      });
    

    这似乎工作正常,示例演示: http://jsbin.com/isuro

    但我做得对吗?我有点笨手笨脚,只是想确保我能正确地接近它。谢谢你的建议!

    3 回复  |  直到 15 年前
        1
  •  0
  •   Peter Bailey    15 年前

    您不应该迭代到输出。

    $('ul').append( arrPosts.join( "\n" ) );
    

    否则看起来不错

        2
  •  1
  •   RaYell    15 年前

    你还是做错了。关键是您不想在循环中修改DOM,因为它太慢了。您向数组中添加了项,这样就可以在一个函数调用中添加所有项:

    $('ul').append(arrPosts.join('')); 
    
        3
  •  1
  •   Itay Maman    15 年前

    在大多数浏览器中,附加一个大的HTML字符串比执行多个小的附加更快。因此

     $('ul').append( arrPosts.join( "\n" ) );
    

    会产生比

      for (i=0;i<arrPosts.length;i++){ 
        $('ul').append(arrPosts[i]); 
      } 
    

    (显然,只有在添加大量元素时,这种差异才是显著的)