## JavaScript performance comparison

Revision 14 of this test case created by

## Preparation code

``````

<script>
Benchmark.prototype.setup = function() {
return deg * Math.PI / 180
}

};

</script>
``````

## Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
1
``````function distance(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLon = deg2rad(lon2 - lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2);

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}

distance(48, -122, 49, -121);``````
pending…
2
``````function distance(lat1, lon1, lat2, lon2) {
var R = 6371;
var dLat = deg2rad(lat2 - lat1);
var dLon = deg2rad(lon2 - lon1);
var a =
0.5 - Math.cos(dLat)/2 +
(1 - Math.cos(dLon))/2;

return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
}

distance(48, -122, 49, -121);``````
pending…
3
``````function distance(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = (lat2 - lat1) * Math.PI / 180;  // deg2rad below
var dLon = (lon2 - lon1) * Math.PI / 180;
var a =
0.5 - Math.cos(dLat)/2 +
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
(1 - Math.cos(dLon))/2;

return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
}

distance(48, -122, 49, -121);``````
pending…
4
``````function distance(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = (lat2 - lat1) * Math.PI / 180;  // deg2rad below
var dLon = (lon2 - lon1) * Math.PI / 180;
var a =
0.5 - Math.cos(dLat)/2 +
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
(1 - Math.cos(dLon))/2;

return R * 2 * Math.asin(Math.sqrt(a));
}

distance(48, -122, 49, -121);``````
pending…
5
``````function distance(lat1, lon1, lat2, lon2) {
var deg2rad = Math.PI / 180;
var diam = 12742; // Diameter of the earth in km (2 * 6371)
var dLat = lat2 - lat1;
var dLon = lon2 - lon1;
var a = (
(1 - Math.cos(dLat)) +
(1 - Math.cos(dLon)) * Math.cos(lat1) * Math.cos(lat2)
) / 2;

return diam * Math.asin(Math.sqrt(a));
}

distance(48, -122, 49, -121);``````
pending…
28
``````function distance(lat1, lon1, lat2, lon2) {
var cos = Math.cos;
lat1 *= 0.017453292519943295;
lon1 *= 0.017453292519943295;
lat2 *= 0.017453292519943295;
lon2 *= 0.017453292519943295;
var diam = 12742; // Diameter of the earth in km (2 * 6371)
var dLat = lat2 - lat1;
var dLon = lon2 - lon1;
var a = (
(1 - cos(dLat)) +
(1 - cos(dLon)) * cos(lat1) * cos(lat2)
) / 2;

return diam * Math.asin(Math.sqrt(a));
}

distance(48, -122, 49, -121);``````
pending…
Slight Mods
``````function haversine ( fromLat, fromLon, toLat, toLon ) {

var PNinfo = [];
var closest = {id: -1, d: 99999999999};

var lat1 = toLat, lon1 = toLon;
var lat2 = fromLat, lon2 = fromLon;

var R = 6371; // km radius of earth
var φ1 = lat1 * deg2rad;
var φ2 = lat2 * deg2rad;
var Δφ = (lat2 - lat1) * deg2rad;
var Δλ = (lon2 - lon1) * deg2rad;

var a = Math.sin( Δφ / 2 ) * Math.sin( Δφ / 2 ) +
Math.cos( φ1 ) * Math.cos( φ2 ) *
Math.sin( Δλ / 2 ) * Math.sin( Δλ / 2 );
var c = 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1 - a ) );

var d = R * c;

return d;

};

haversine(48, -122, 49, -121);``````
pending…
As Was
``````function haversine ( fromLat, fromLon, toLat, toLon ) {

var PNinfo = [];
var closest = {id: -1, d: 99999999999};

var lat1 = toLat, lon1 = toLon;
var lat2 = fromLat, lon2 = fromLon;

var R = 6371; // km radius of earth
var φ1 = lat1 * Math.PI/180;
var φ2 = lat2 * Math.PI/180;
var Δφ = (lat2 - lat1) * Math.PI/180;
var Δλ = (lon2 - lon1) * Math.PI/180;

var a = Math.sin( Δφ / 2 ) * Math.sin( Δφ / 2 ) +
Math.cos( φ1 ) * Math.cos( φ2 ) *
Math.sin( Δλ / 2 ) * Math.sin( Δλ / 2 );
var c = 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1 - a ) );

var d = R * c;

return d;

};

haversine(48, -122, 49, -121);``````
pending…
6
``````function distance(lat1, lon1, lat2, lon2) {
var deg2rad = 0.017453292519943295; // === Math.PI / 180
var cos = Math.cos;
var diam = 12742; // Diameter of the earth in km (2 * 6371)
var dLat = lat2 - lat1;
var dLon = lon2 - lon1;
var a = (
(1 - cos(dLat)) +
(1 - cos(dLon)) * cos(lat1) * cos(lat2)
) / 2;

return diam * Math.asin(Math.sqrt(a));
}

distance(48, -122, 49, -121);``````
pending…

## Revisions

You can edit these tests or add even more tests to this page by appending `/edit` to the URL.