开发者

Force element.innerHTML update before javascript sort call

开发者 https://www.devze.com 2022-12-29 11:10 出处:网络
what is the best practice for this scenario: 1) User clicks \"Sort huge javascript array\" 2) Browser shows \"Sorting...\" through element.innerHTML=\"Sorting\"

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 s开发者_如何学JAVAeconds 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.

function sortHugeArray(){
    document.getElementById("progress").innerHTML="Sorting...";
    setTimeout(function() {
        ...do huge sort ...
        ...render result...
        document.getElementById("progress").innerHTML=result;
    }, 0);
}

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消