From 6773c19e2d2c372a144ec3cb5b426ce2fa135016 Mon Sep 17 00:00:00 2001 From: Antoine Pultier Date: Thu, 19 Dec 2013 16:27:46 +0100 Subject: [PATCH] buildTree performances improvement --- kdTree.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/kdTree.js b/kdTree.js index cd7f554..d552a85 100644 --- a/kdTree.js +++ b/kdTree.js @@ -22,6 +22,18 @@ function kdTree(points, metric, dimensions) { var self = this; + + var dimensionsCompare = []; + + for (var i = 0, l = dimensions.length; i < l; ++i) { + var key = dimensions[i]; + + // Create a function with direct access to properties + // faster : http://jsperf.com/sort-comparaison-function + var compare = Function("a", "b", "return (a."+key+" > b."+key+" ? 1 : - 1)|0"); + + dimensionsCompare.push(compare); + } function buildTree(points, depth, parent) { var dim = depth % dimensions.length, @@ -35,9 +47,7 @@ return new Node(points[0], dim, parent); } - points.sort(function (a, b) { - return a[dimensions[dim]] - b[dimensions[dim]]; - }); + points.sort(dimensionsCompare[dim]); median = Math.floor(points.length / 2); node = new Node(points[median], dim, parent);