Naïve level-of-detail on the terrain.
Staggered map tile generation with setTimeout

To make the map generation "more responsive", it is done in one-tile
steps via a function which chains itself with setTimeout. A simple
message under the canvas also shows the progress.

This is far too clunky. The real solution will be to use web workers,
especially with "transferrable objects" for the actual mesh data.
Given that the data is in typed arrays anyway, this should be quite
straightforward.