async function loadAndRender(url) {
const t0 = Date.now();
const df = await loadData(url);
const t1 = Date.now();
const t2 = Date.now();
const extent = await getExtent(df);
const t3 = Date.now();
const w = width;
const pixels_per_point = w / extent.x.range;
const h = extent.y.range * pixels_per_point;
const canvas = DOM.canvas(w, h);
const ctx = canvas.getContext("2d");
const image = ctx.createImageData(w, h);
const t4 = Date.now();
plotMolecules(df, image, 0xFF000000, extent);
ctx.putImageData(image, 0, 0);
const t5 = Date.now();
return [canvas, df, t1 - t0, t3 - t2, t5 - t4, t5 - t0];
}