@hrgdavor nice reply.
that was my first thought after looking at the example from @Robert-Olson
transforms (translation, rotation, scale, center, etc) are very fast, as only the matrix part of the geometry is modified. so, create a 'part' once and translate many times.
here's a example from one of my designs.
const makeRow = (h, p) => {
let i = 0
let x = 0
let y = 0
let c = circle({radius: p.case_b_v_h, segments: p.segments})
let holes = [c]
for (i = 1; i < h; i++) {
y = y + (p.case_b_v_h * 2) + p.case_b_v_g
holes.push(translate([x, y], c))
}
return translate([0, -(y / 2)], holes)
}