私はJavaScriptをツールとして長年使用していますが、JavaScriptを使用してアプリケーションのプログラミングを開始したのはごく最近のことです。JavaScriptでCrockfordを見た後-レベル6:Loopage私はイベントループとブロックしないスタイルに感謝し始めました。これをよりよく理解するために、私はコードの設計が不適切な領域があると信じているアプリに戻りました。
アプリケーションは、最大20個の要素を含む最大45KBのJSONファイル(縮小、非圧縮)をダウンロードするため、平均して各要素には約2.25KBのデータが含まれます。ダウンロードは毎分行われ、手動でトリガーされます。その時点で、新しいアレイが古いアレイに置き換わります。15秒ごとに、DOMがクリアされ、配列が繰り返されます。計算とロジックがデータに対して実行され、DOMに挿入されるDOM要素のグループが作成されます。
行うのではなく:
for (int i = 0; i < array.length; i++) {
// Perform logic
}
ブロッキングなしの方法でそれを実装するにはどうすればよいですか?これまでのところ私は思いついた:
var performLogic = function performLogic(element) {
// Perform logic
}
var counter = 0;
var iterator = function iterator() {
counter += 1
if (counter < array.length) {
performLogic(array[counter]);
setTimeout(iterator, 0);
}
}
setTimeout(function() {
counter = 0;
iterator();
}, 0);
頭が回らない。データのグループが同じ配列からのものでなくても、配列の長さがperformLogic()
変わる可能性があるため、呼び出しの間にデータがダウンロードされた場合、これは失敗することを私は知っています。