Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>SmugMug TreeView stress test</title>
  <link rel="stylesheet" href="http://smugmug.github.com/yui-gallery/build/gallery-sm-treeview/assets/skins/sam/gallery-sm-treeview.css">
  </head>
<body class="yui3-skin-sam">  
  <h1>SmugMug TreeView stress test</h1>
  <textarea id="log" rows="5"></textarea>
  <button id="go">Go!</button>
  <div id="treeview"></div>
  
  <script src="http://yui.yahooapis.com/3.8.0/build/yui/yui-min.js"></script>
    
</body>
</html>
 
YUI({
  gallery: 'gallery-2013.01.09-23-24'
}).use('gallery-sm-treeview', function (Y) {
  var container = Y.one('#treeview'),
      logNode   = Y.one('#log'),
      treeview;
  
  Y.one('#go').after('click', function () {
    if (treeview) {
      treeview.destroy();
    }
    
    container.empty();
    logNode.set('value', '');
    log('Running...');
    
    setTimeout(function () {
      // Generate a bunch of bogus data to fill the tree with.
      var nodes = [],
          child, end, node, start;
    
      for (var i = 0; i < 1000; i++) {
        node = {label: 'Item ' + i};
        
        // Fill every third node with 20 children.
        if (i % 3 === 0) {
          fillChildren(node, 20);
        }
        
        // Fill every tenth node with children to a depth of 50.
        if (i % 10 === 0) {
          fillChildren(node, 1, 50);
        }
        
        nodes.push(node);
      }
      
      start = new Date();
      
      treeview = new Y.TreeView({
        container: container,
        nodes    : nodes
      });
    
      end = new Date();
      
      log('Instantiated TreeView in ' + (end - start) + 'ms');
      
      start = new Date();
      treeview.render();
      end = new Date();
    
      log('Rendered ' + treeview.size() + ' nodes in ' + (end - start) + 'ms');
    }, 10);
  });
  
  // -- Utility functions ----
  function fillChildren(parent, count, depth) {
    var child;
    
    if (!parent.children) {
      parent.children = [];
    }
    
    for (var i = 0; i < count; i++) {
      child = {label: 'Child ' + i};
      
      if (depth) {
        fillChildren(child, count, depth - 1);
      }
      
      parent.children.push(child);
    }
  }
  function log(msg) {
    logNode.set('value', logNode.get('value') + msg + '\n');
  }
  
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
rgrovepro
0viewers