In the end this turned out to be as easy as modifying the options we passed to the fetch() function. Afterwards the browser caching mechanism was enough to mitigate slamming the server.

The changes made:
* the fetch request was done with a slightly broken accept header, which had the server always return HTML instead of a JSON document
* the fetch request was using 'no-cors' option, which strips the accept header (the mdn docs say it should stay, but it doesn't look like it for my tests)
* the fetch request now uses 'force-cache' option to avoid making more requests to the server even if it's stale.

TY:
@tjcrowdertech @diabhoil @hattifattener @yasser