AJAX App JavaScript加载问题

时间:2012-02-17 18:27:23

标签: javascript ajax asp.net-mvc

我正在创建一个完整的ajax应用程序,其中有一个基页,用户在应用程序中导航到的任何页面都通过ajax加载到页面上的内容div中。在基页上,我包含了应用程序中每个页面所需的各种脚本(jQuery,jQuery-UI,其他自定义javascript文件)。然后在应用程序的各个页面上,我为每个页面包含一个或两个脚本,其中包含该页面所需的逻辑。每个脚本文件都有一些在页面就绪事件上执行的内容。问题是每次用户导航到page1时,都会加载page1.js文件。因此,如果他们访问该页面10次,那么该脚本将被加载到浏览器中十次。在浏览网站后查看Chrome脚本开发人员工具,我看到了大量重复的脚本。

我在某处读过有关检查脚本是否已使用布尔值加载或将加载的脚本存储在数组中的内容。但是,问题在于,如果我看到脚本已经加载并且我没有加载它,则页面就绪函数不会被页面的javascript文件触发,一切都会失败。

当用户多次访问同一页面时,是否存在反复加载javascript文件的问题?

我确实注意到每次访问该页面时都会查看网络流量,并使用随机数参数(/Scripts/Page1.js?_=298384892398)请求脚本,该参数会导致每次强制请求脚本文件时间。我在jQuery ajaxSetup方法上设置了cache:true设置,并从请求中删除了参数,因此加载了javascript文件的缓存版本,而不是实际为它发出单独的HTTP请求。但是,问题是我不希望所有的ajax请求都被缓存为内容一直在变化。有没有办法强制只缓存javascript文件,但允许所有其他ajax请求不被缓存。

即使我强制缓存所有请求,javascript文件仍然在开发人员工具中出现多次。也许这不是什么大不了的事,但似乎不太正确。

关于如何处理这种情况的任何建议?

2 个答案:

答案 0 :(得分:1)

关于你的第一个问题:

每次加载JavaScript文件时,浏览器都会评估整个内容。如果您可以连续多次加载和执行它,它完全取决于内容。我不认为这是最好的做法。 ;)

我仍然建议您找一种方法来检查它是否已经加载并在已经存在的代码中手动触发“页面加载”事件。

对于第二个问题:我假设该脚本多次包含时会出现多次。要提供有关如何不缓存加载的JS的建议,我需要知道如何加载代码,如何进行AJAX和一般的jQuery设置。

答案 1 :(得分:0)

在做了一些研究后,看起来它实际上只是一个Chrome问题。通过AJAX加载脚本时,您可以在代码中包含以下内容,以使其显示在Chrome开发人员工具中

// @ sourceURL = some-script-name

问题在于,当您离开页面时,开发人员工具会保留脚本,但页面实际上不再引用它。

相关问题