requestIdleCallback

See Improving responsiveness in text inputs for an explanation of how to use JavaScript requestIdleCallback for improved browser responsiveness:

let queued = false
textarea.addEventListener('input', () => {
  if (!queued) {
    queued = true
    requestIdleCallback(() => {
      updateUI(textarea.value)
      queued = false
    })
  }
})