[PATCH] Optimization for hgweb's graph JS

Augie Fackler lists at durin42.com
Mon Jun 23 23:24:38 UTC 2008


# HG changeset patch
# User Augie Fackler <durin42 at gmail.com>
# Date 1214263270 18000
# Node ID 2ed19dcfbfd11cc48c523afe00602716c63ff170
# Parent  1fe6f365df2e0ed6dd56b5bd9993812378506174
Change the way in which the javascript renders the graph such that the  
graph
renders significantly faster.

diff --git a/templates/coal/graph.tmpl b/templates/coal/graph.tmpl
--- a/templates/coal/graph.tmpl
+++ b/templates/coal/graph.tmpl
@@ -67,9 +67,6 @@
  	
  }

-var nodes = document.getElementById('graphnodes');
-var nodebgs = document.getElementById('nodebgs');
-
  var revlink = '<li style="_STYLE"><span class="desc">';
  revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}"  
title="_NODEID">_DESC</a>';
  revlink += '</span><span class="tag">_TAGS</span>';
@@ -83,7 +80,6 @@
  	this.ctx.fill();
  	
  	var bg = '<li class="bg parity' + parity + '"></li>';
-	nodebgs.innerHTML += bg;
  	
  	var left = (this.columns + 1) * this.bg_height;
  	var nstyle = 'padding-left: ' + left + 'px;';
@@ -95,8 +91,8 @@
  	item = item.replace(/_USER/, cur[4]);
  	item = item.replace(/_DATE/, cur[5]);
  	item = item.replace(/_TAGS/, cur[7].join('  '));
-	nodes.innerHTML += item;
-	
+ 	return {'nodesBg': bg,
+		'nodes': item }	
  }

  graph.render(data);
diff --git a/templates/gitweb/graph.tmpl b/templates/gitweb/graph.tmpl
--- a/templates/gitweb/graph.tmpl
+++ b/templates/gitweb/graph.tmpl
@@ -59,9 +59,6 @@
  	
  }

-var nodes = document.getElementById('graphnodes');
-var nodebgs = document.getElementById('nodebgs');
-
  var revlink = '<li style="_STYLE"><span class="desc">';
  revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars 
%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
  revlink += '</span> _TAGS';
@@ -75,7 +72,6 @@
  	this.ctx.fill();
  	
  	var bg = '<li class="bg parity' + parity + '"></li>';
-	nodebgs.innerHTML += bg;
  	
  	var left = (this.columns + 1) * this.bg_height;
  	var nstyle = 'padding-left: ' + left + 'px;';
@@ -107,8 +103,9 @@
  	}
  	
  	item = item.replace(/_TAGS/, tagspan);
-	nodes.innerHTML += item;
-	
+    return {'nodesBg': bg,
+            'nodes': item
+           };
  }

  graph.render(data);
diff --git a/templates/graph.tmpl b/templates/graph.tmpl
--- a/templates/graph.tmpl
+++ b/templates/graph.tmpl
@@ -52,9 +52,6 @@
  	
  }

-var nodes = document.getElementById('graphnodes');
-var nodebgs = document.getElementById('nodebgs');
-
  var revlink = '<li style="_STYLE"><span class="desc">';
  revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}"  
title="_NODEID">_DESC</a>';
  revlink += '</span><span class="info">_DATE ago, by _USER</span></ 
li>';
@@ -67,7 +64,6 @@
  	this.ctx.fill();
  	
  	var bg = '<li class="bg parity' + parity + '"></li>';
-	nodebgs.innerHTML += bg;
  	
  	var left = (this.columns + 1) * this.bg_height;
  	var nstyle = 'padding-left: ' + left + 'px;';
@@ -78,7 +74,9 @@
  	item = item.replace(/_DESC/, cur[3]);
  	item = item.replace(/_USER/, cur[4]);
  	item = item.replace(/_DATE/, cur[5]);
-	nodes.innerHTML += item;
+	return {'nodesBg': bg,
+		'nodes': item
+		}
  	
  }

diff --git a/templates/static/graph.js b/templates/static/graph.js
--- a/templates/static/graph.js
+++ b/templates/static/graph.js
@@ -74,7 +74,8 @@
  	}

  	this.render = function(data) {
-		
+		nodesbg_append = ''
+		nodes_append = ''
  		for (var i in data) {
  			
  			var parity = i % 2;
@@ -118,12 +119,13 @@
  			radius = this.box_size / 8;
  			x = this.cell[0] + this.box_size * column + this.box_size / 2;
  			y = this.bg[1] - this.bg_height / 2;
-			this.vertex(x, y, color, parity, cur);
-			
+			var newData = this.vertex(x, y, color, parity, cur);
+			nodesbg_append += newData.nodesBg;
+			nodes_append += newData.nodes;
  			if (fold) this.columns -= 1;
-			
  		}
-		
+		document.getElementById('graphnodes').innerHTML += nodes_append;
+		document.getElementById('nodebgs').innerHTML += nodesbg_append;
  	}

  }




More information about the Mercurial-devel mailing list