Так и должно быть, это оптимизация браузера. Сначала браузер выполнит весь js, потом только страница перерендерится. Если js выполняется достаточно долгое время, то заметен лаг прелоадера.
Я сам не знаю ответ, поэтому подпишусь на вопрос.
Но возможно поможет асинхронность: сначала убрать лоадер, потом через setTimeout выполнить остальной скрипт.