おそらく「金曜日の 5:00 以降で、家に帰りたい」効果ですが、この問題に困惑しています。それぞれを呼び出す再帰的な反復子メソッドがあります。
function canIterate(obj) {
return (obj && (typeof obj === 'object' || Array.isArray(obj)));
}
function each(obj, onSuccess, recursive) {
if (canIterate(obj)) {
Object.keys(obj).forEach(function(key) {
var val = obj[key];
if (onSuccess && val && key) {
var quit = onSuccess(val, key);
if (false === quit) {
return false;
}
}
if (true === recursive) {
each(val, onSuccess, true);
}
});
}
}
これは、大規模なデータセットでは非常に遅くなります (以下で説明します)。@raganwald がここで説明しているように、トランポリンは問題の解決策です。. 私の質問は、この再帰関数をリファクタリングしてトランポリン手法を利用するにはどうすればよいですか?
したがって、ツリーの現在の状態を要求するポーリング メカニズムがあります。この場合は、次のようなロケーション ツリーです。
Hospital Campus Main
Main Building
Radiology Department
Lab 1
Lab 2
MRI Lab
Machine Cabinets
Spare Parts Shelf
ツリーは、場所に属するもののグリッドでレンダリングされます。グリッド内の場所を持つ行ごとに、ルートをこの行の場所に設定してツリーをレンダリングする必要があります。したがって、次の場合:
Part | Location | Tree
widget MRI Lab MRI Lab > Machine Cabinets > Spare Parts Shelf
したがって、これらの一部またはすべてがサーバー側で処理される可能性があることは気にしないでください。後でデータ フェッチのパフォーマンスを最適化します。
トランポリンまたはCPS スタイルを使用するように各メソッドを書き直す効率的な方法はありますか?