I have an html page with some pre-rendered content and some yet un-rendered content. I want to display the pre-rendered content immediately, and then begin rendering the rest of the content. I am not using jQuery.
See the following snippet. I have tried this various ways, including injecting my script before the closing body tag and providing my script to populate the DOM as a callback to window.onload, document.body.onload, and document.addEventListener('DOMContentLoaded'). In every case, the page does not display the pre-rendered content until the rest of the content is rendered.
<html><head></head> <body> <header>What it is, my doge?</header> <div id="main"></div> <script> var main = document.getElementById('main'); for (var i = 0; i < 500; i++) main.innerText += new Date(); </script> </body> </html> <html><head></head> <body> <header>What it is, my doge?</header> <div id="main"></div> <script> var main = document.getElementById('main'); document.body.onload = function() { for (var i = 0; i < 500; i++) main.innerText += new Date(); }; </script> </body> </html> <html><head></head> <body> <header>What it is, my doge?</header> <div id="main"></div> <script> var main = document.getElementById('main'); window.onload = function() { for (var i = 0; i < 500; i++) main.innerText += new Date(); }; </script> </body> </html> <html><head></head> <body> <header>What it is, my doge?</header> <div id="main"></div> <script> var main = document.getElementById('main'); document.addEventListener('DOMContentLoaded', function() { for (var i = 0; i < 500; i++) main.innerText += new Date(); }); </script> </body> </html> One case that has worked is window.setTimeout with 0 timeout. However, this simply defers the function until there is nothing left to do. Is this the best practice, here?
<html><head></head> <body> <header>What it is, my doge?</header> <div id="main"></div> <script> var main = document.getElementById('main'); window.setTimeout(function() { for (var i = 0; i < 500; i++) main.innerText += new Date(); }, 0); </script> </body> </html>
</body>tagsetTimeout(function(){}, 0)method does not appear to work in FireFox. It requires a timeout of ~50-100ms.