JSFiddle - React, Tailwind, and code Playground

HTML

<pre id="log-result">
Max size for Int8Array
</pre>

JavaScript

function log(message) {
  if (typeof document !== 'undefined') {
    document.getElementById('log-result').innerText += message + '\n';
  } else {
    console.log(message);
  }
}

function fastSearch(prev, cur) {
  console.log('Fast search:', cur);
  try {
    new Int8Array(cur);
    setTimeout(fastSearch, 20, cur, cur * 2);
  } catch (e) {
    console.log(e);
    console.log(e.name, e.message);
    // console.log('Fast:', prev, '<= x <', cur);
    log('Fast: ' + prev + ' <= x < ' + cur);
    setTimeout(slowSearch, 20, prev + 1, cur);
  }
}

function slowSearch(lower, upper) {
  // lower - not checked yet
  // upper - checked, guaranteed to fail
  const delta = upper - lower;
  if (delta <= 0) {
    console.log('Slow search finished:', lower, upper);
    log('Slow: ' + (upper - 1));
    return;
  }

  // lower <= mid < upper
  // const mid = lower + (delta >> 1); shift right has 32-bit limitation
  const mid = lower + Math.trunc((upper - lower) / 2);
  console.log('Slow search:', lower, mid, upper);
  try {
    new Int8Array(mid);
    console.log('OK:', mid);
    lower = mid + 1; // mid >= lower, mid + 1 > lower -> range decreases
  } catch (e) {
    console.log('Fail:', mid);
    upper = mid; // mid < upper -> range decreases
  }

  setTimeout(slowSearch, 20, lower, upper);
}

function detectMaxArrayLength(n) {
  fastSearch(n, n);
}

if (typeof navigator !== 'undefined') {
  log(navigator.userAgent);
}

detectMaxArrayLength(32768);