Forçar o navegador a redesenhar imediatamente um elemento dom

Eu preciso inserir uma enorme marcação html em algum elemento dom que levará algum tempo. É uma razão pela qual eu quero exibir algum indicador de pré-carregador. Eu tenho dois blocos: #preloader e #container. Algum código exibe o pré-carregador primeiro e depois começa a colar uma grande marcação html.

O problema - o preloader realmente não foi exibido até o navegador não concluir a renderização da marcação html. Eu tentei muitas soluções (muitas delas são descritasaqui) mas ainda não obteve sucesso.

Um exemplo está disponível abaixo:https://jsfiddle.net/f9f5atzu/

<div id='preloader'>Preloader...</div>
<div id='container'>Container...</div>

#preloader {
  display: none;
  background-color: #f00;
  color: #fff;
  hight: 100px;
  text-align: center;
  padding: 10px 20px;
}

#container {
  background-color: #ccc;
}


setTimeout(function() {
  // Define variables
  let domPreloader = document.getElementById('preloader');
  let domContainer = document.getElementById('container');
  const html = Array(100000).fill("<div>1</div>");

  // Display preloader
  domPreloader.style.display = 'hide';
  domPreloader.offsetHeight;
  domPreloader.style.webkitTransform = 'scale(1)';
  domPreloader.style.display = 'block';

  // Render a big html
  domContainer.innerHTML = html;
}, 1000);

Existe alguma solução para o problema?

questionAnswers(1)

yourAnswerToTheQuestion