var pool = []
, timeoutId = setInterval(update, 750)
, random = d3.random.normal(20, 10)
, format = d3.time.format('%X')
update()
function update() {
var data = d3.range.apply(null, [random(), random()].sort(d3.ascending))
, update = d3.select('ul').selectAll('li').data(data)
, enter = update.enter().select(acquire)
, exit = update.exit().each(release)
}
function acquire(d, i) {
var item = pool.pop()
if (!item) {
item = document.createElement('li')
item.innerText = 'created: ' + format(new Date())
}
this.appendChild(item)
return item
}
function release(d, i) {
var item = this
item.parentNode.removeChild(item)
pool.push(item)
}