what is the best practice for this scenario:
1) User clicks “Sort huge javascript array”
2) Browser shows “Sorting…” through element.innerHTML=”Sorting”
3) Browser sorts huge javascript array (100% CPU for several seconds) while displaying “Sorting…” message.
4) Browser shows result.
Pseudo code:
...
<a href="#" onclick="sortHugeArray();return false">Sort huge array</a>
...
function sortHugeArray(){
document.getElementById("progress").innerHTML="Sorting...";
...do huge sort ...
...render result...
document.getElementById("progress").innerHTML=result;
}
When i do that this way, browser never shows “Sorting…”, it freezes browser for several seconds and shows result without noticing user…
Thank you for advice.
You have to return control to the browser to let it update any changes on-screen. Use a timeout to ask it to return control to you.
It’s a bit questionable to be executing a script for ‘several seconds’, though. There should be a way to speed that up, or break the process into parts returning control with a timeout every so often to keep the page responsive.