jQ mobile は、注意しないとリークが発生することが知られています。全体として、特にそれらを一緒に使用している場合、リストした 4 つのツールキットすべてが問題を引き起こす可能性があると思います。
おそらく、あなたができる最善のことは、可能な限り 1 つのライブラリに固執し、リークを最小限に抑えるような方法で使用することに集中することです。モバイル ブラウザーの問題は、より多くのクロージャー マジックが進行中であり、JS エンジンは (まだ) あまり知られていない/理解されていないことです。タッチ デバイス用の JS イベント デリゲーション コードの記述に手を出したことがある場合は、驚くほど多くのクロージャーと、GC が間に合わない可能性がある DOM 参照があることに気付いたに違いありません。これについてあなたができることはそれほど多くありません。
一般的に、私はあまりにも多くのライブラリを使用することを避ける傾向があります (私は、正直に言うと、どのライブラリも使用しないようにクロールして攻撃する人々の 1 人です)。しかし、どのように表現しても、headjs と jQueryready
が想像できるすべての方法でイベントをチェックする傾向の組み合わせは面倒かもしれません: 新しい要素を動的にロードしていますが、これが jQ のready
イベントを複数回トリガーするかどうかを確認しましたか? その場合、ほとんどの場合、同じハンドラーを何度も何度もバインドしています。各 ajax リクエストは、他のツールキットも同じことを行うようにトリガーする可能性があり、それにより jQuery が再度トリガーされ、さらに他のライブラリが再度トリガーされる可能性があります。
あなたは写真を手に入れました。私は専門家ではありませんが、1 つのライブラリが別のライブラリをトリガーする可能性があり、その逆もあり、デッドロック シナリオが発生する可能性があると推測します。ready
私はこれを、私がしばらく前に遭遇した同様の問題の漠然とした思い出に基づいています。また、さまざまなライブラリを使用してスクリプト/CSS を動的にロードしているという事実、および jQ がすべてのリスナーを最後にアンバインドしないという事実に基づいています。確認した時間。私の勘が正しければ、悪のグローバル変数をクイックフィックスとして使用できます。
var jQReady = false;
jQuery(document).load(function()
{
if (jQReady === true)
{//was loaded
return;
}
jQready = true;//<-- set to true on first invocation of callback
});