Exploring mourner/quickselect as a faster alternative to compute d3.median()
Note: a better alternative is probably simplestatistics.
See d3 issue #1833.
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://unpkg.com/quickselect"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<script>
// Feel free to change or delete any of the code you see in this editor!
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500)
const data = d3.range(1000000).map(Math.random);
let timem = performance.now();
const m = d3.median(data);
timem -= performance.now();
let timeq = performance.now();
partialSort(data, data.length/2);
partialSort(data, data.length/2-1);
const q = (data[data.length/2-1] + data[data.length/2]) / 2;
timeq -= performance.now();
svg.append("text")
.text(`Result: ${m == q} ; quickselect time is ${d3.format('3.1%')(timeq/timem)} of d3.median time`)
.attr("y", 200)
.attr("x", 120)
.style("font-size", 20)
.style("font-family", "monospace")
</script>
</body>
https://d3js.org/d3.v4.min.js
https://unpkg.com/quickselect