以下のような処理があったとき、重い処理はsetTimeoutで処理すべきでしょうか?

$(document).bind("keydown keyup",function(e){
    if (e.type === "keydown"){
        ... //重い処理
    }
    if (e.type === "keyup"){
        ... //別の処理
    }
});

つまり、このようにすべきでしょうか?

$(document).bind("keydown keyup",function(e){
    if (e.type === "keydown"){
        setTimeout(function(param1,param2){
            ... //重い処理
        },0,prm1,prm2);
    }
    if (e.type === "keyup"){
        ... //別の処理
    }
});

あるキーがkeydownされたら重い処理を行い、keyupされたら別の軽い処理を行っているのですが、重い処理が途中で終わってしまっている気がします。
実際には、undo処理みたいなことをctrl+Zkeydownでやってるんですが、途中で終わっているというか、長くkeydownするとちゃんと動くような感じで困ってます。
重い処理といっても、何秒もかかるようなものではありません。せいぜい長くて数百ミリ秒~1秒だとおもいます。

いかんせん、ここ最近JavaScriptもjQueryも始めたため、ちゃんと理解出来ていないと思います。宜しくお願いします。


捕捉します。重い処理で行った結果を受けて、別の処理を行います。
実際にはundoを行うとブラウザ上の要素のサイズ等変更を元に戻す、そのようにしようとしています。


分かりづらいので、捕捉します。
上記の処理で、keydownkeyupとは、処理を共有していますが、keydownkeyupでイベントを引いている無名関数はそれぞれ別々に非同期処理されているのだと思っています。ただ、わたしはJavaScriptを使って間もないのでその辺の理解が間違っているかもしれません。

keydownされ、重い処理がはじまってkeyupされるまでに処理が終わらず、それでおかしなことが起きているのだろうかと思っています。

もし、そのばあいkeydown側の重い処理が終了してからkeyupの処理を行わせる(keyupが完了していてキー操作とずれても構わないので)といいますか適切に待つ処理が必要なら、御教示いただけると助かります。

JavaScriptではクリティカルセクションのような仕組みはないかと調べていましたが、ローカル側でそんなことをしちゃいけないのでしょうか?