ハッシュを変更し、ページのコンテンツのみを読み込んで変更する単一ページ アプリでは、各「ページ」に必要な JavaScript を管理する方法を決定しようとしています。
のように見える場所のハッシュを監視する History モジュールdomain.com/#/company/about
と、XHR を使用してコンテンツを取得し、コンテンツ領域に挿入する Page クラスを既に持っています。
function onHashChange(hash) {
var skipCache = false;
if(hash in noCacheList) {
skipCache = true;
}
new Page(hash, skipCache).insert();
}
// Page.js
var _pageCache = {};
function Page(url, skipCache) {
if(!skipCache && (url in _pageCache)) {
return _pageCache[url];
}
this.url = url;
this.load();
}
キャッシュは、すでにロードされているページが XHR をスキップできるようにする必要があります。また、コンテンツを documentFragment に格納し、新しい を挿入するときに現在のコンテンツをドキュメントから引き出すPage
ので、ブラウザはフラグメントの DOM を 1 回だけ構築する必要があります。
ページに時間依存のデータがある場合は、キャッシュをスキップすることが望ましい場合があります。
決定するのに助けが必要なのは次のとおりです。ロードされるページには、ページを制御するための独自の JavaScript が含まれている可能性が非常に高いです。ページがタブを使用する場合、スライド ショーが必要な場合、ある種のアニメーションがある場合、Ajax フォームがある場合、または what-have-you がある場合などです。
その JavaScript をページにロードする最善の方法は何ですか? XHR から取得した documentFragment にスクリプト タグを含めますか? キャッシュをスキップして、フラグメントを再ダウンロードする必要がある場合はどうすればよいでしょうか。まったく同じ JavaScript が 2 回呼び出されると、同じ変数を再宣言するなど、競合が発生する可能性があると思います。
新しい をつかむときに、スクリプトを頭に添付する方が良いでしょうPage
か? そのためには、元のページが、他のすべてのページが必要とする可能性のあるすべてのアセットを知っている必要があります。
そして、すべてを含める最善の方法を知っているだけでなく、メモリ管理や、非常に多くの異なる JavaScript ビットを 1 つのページ インスタンスにロードすることによるリークの可能性について心配する必要はありませんか?