В одностраничном приложении, где я изменяю хэш, загружаю и изменяю только содержимое страницы, я пытаюсь решить, как управлять JavaScript, который может понадобиться каждой "странице".
У меня уже есть модуль History, отслеживающий хэш местоположения, который может выглядеть как domain.com/#/company/about
, и класс Page, который будет использовать XHR для получения содержимого и вставки его в область содержимого.
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 для фрагмента только один раз.
Пропуск кэша может потребоваться, если на странице есть данные, чувствительные ко времени.
Вот что мне нужно, чтобы принять решение: Вполне вероятно, что на любой из загружаемых страниц будет свой собственный JavaScript для управления страницей. Например, если на странице будут использоваться вкладки, требуется слайд-шоу, анимация, форма ajax или что-то еще.
Каков наилучший способ загрузки этого JavaScript на страницу? Включить теги сценария в фрагмент документа, который я получил от XHR? Что делать, если мне нужно пропустить кэш и повторно загрузить фрагмент. Я чувствую, что тот же самый JavaScript-код, вызываемый во второй раз, может вызвать конфликты, например, повторное выделение тех же переменных.
Будет ли лучший способ прикрепить сценарии к голове при получении нового Page
? Это потребовало бы, чтобы исходная страница знала все ресурсы, которые могут понадобиться каждой другой странице.
И кроме того, что я знаю, как лучше всего включить все, не нужно ли мне беспокоиться об управлении памятью и возможных утечках при загрузке стольких различных бит JavaScript в один экземпляр страницы?