对于一个单页应用程序,我在其中更改哈希并加载并仅更改页面的内容,我试图决定如何管理每个“页面”可能需要的 JavaScript。
我已经有了一个历史模块来监控位置散列,看起来像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 中,然后在插入 new 时将当前内容从文档中拉出Page
,因此浏览器只需为片段构建 DOM 一次。
如果页面具有时间敏感数据,则可能需要跳过缓存。
以下是我需要帮助决定的内容:很可能任何被加载的页面都会有一些自己的 JavaScript 来控制页面。就像页面将使用选项卡、需要幻灯片放映、有某种动画、有 ajax 表单或你有什么一样。
将 JavaScript 加载到页面中的最佳方法到底是什么?在我从 XHR 返回的 documentFragment 中包含脚本标签?如果我需要跳过缓存并重新下载片段怎么办。我觉得第二次调用完全相同的 JavaScript 可能会导致冲突,比如重新声明相同的变量。
更好的方法是在获取新脚本时将脚本附加到头部Page
?这将要求原始页面知道所有其他页面可能需要的所有资产。
除了知道包含所有内容的最佳方式之外,我是否不需要担心内存管理以及将这么多不同的 JavaScript 位加载到单个页面实例中的可能泄漏?