We have a case where a View returns a result set of over 15,000. When results get this large a server will often get hung up on line 1268 of active_view.module.

  foreach ($nodes as $node) {
    $rendered_nodes[] = template_api_prepare_node($node->nid, $teaser, TRUE);  
  }

I understand that this has to be done due to the fact that setting views_build_view()'s $type parameter to 'items' on line 658 does not return the each node's type field. Yet, even if it did return the node's type field, then there would still be a lot of processing to sort out distinct node types using PHP.

My quick fix is to change the views_build_views()'s type parameter to 'query' and add 'GROUP BY node.type' to the SQL statement. In the case of a View result set of 15,000, this reduces the amount of queries from over 15,000 to under 10. There is some other logic to clean up (the 'Node count:' field on the form is confused, it's actually displaying the number of node types at this point) but it serves the purpose.

  $views_queries = views_build_view('queries', $view);
  $query = $views_queries['query'];
  $str_pos = strripos($query, ")");
  $query = substr($query, 0, $str_pos+1);
  $query .= ' GROUP BY node.type';
  $result = db_query($query);
  while($node = db_fetch_object($result)){
  	$nodes[] = $node;
  }
  return active_view_prepare_nodes($view, $nodes, $template->type);  

I would be willing to commit this and clean up the surrounding logic.