hgweb: optimize process_dates function
authorAlexander Plavin <alexander@plav.in>
Fri, 06 Sep 2013 13:30:58 +0400
changeset 19857 14fddba036f8
parent 19856 28b1b7b9b4a9
child 19858 4a8c5a51f7a1
hgweb: optimize process_dates function This function looped over every node due to getElementsByTagName('*'), instead of using selectors. In this patch we use querySelectorAll('.age') and process only these nodes, which is much faster and also doesn't require extra condition. Browser compatibility isn't sacrificed: IE 8+, FF 3.5+, Opera 10+.
mercurial/templates/static/mercurial.js
--- a/mercurial/templates/static/mercurial.js	Thu Aug 29 09:22:15 2013 -0700
+++ b/mercurial/templates/static/mercurial.js	Fri Sep 06 13:30:58 2013 +0400
@@ -253,21 +253,18 @@
 		}
 	}
 
-	var nodes = document.getElementsByTagName('*');
-	var ageclass = new RegExp('\\bage\\b');
+	var nodes = document.querySelectorAll('.age');
 	var dateclass = new RegExp('\\bdate\\b');
 	for (var i=0; i<nodes.length; ++i){
 		var node = nodes[i];
 		var classes = node.className;
-		if (ageclass.test(classes)){
-			var agevalue = age(node.textContent);
-			if (dateclass.test(classes)){
-				// We want both: date + (age)
-				node.textContent += ' ('+agevalue+')';
-			} else {
-				node.title = node.textContent;
-				node.textContent = agevalue;
-			}
+		var agevalue = age(node.textContent);
+		if (dateclass.test(classes)){
+			// We want both: date + (age)
+			node.textContent += ' ('+agevalue+')';
+		} else {
+			node.title = node.textContent;
+			node.textContent = agevalue;
 		}
 	}
 }