jQuery $ .getScript上次修改日期

时间:2014-01-02 13:38:28

标签: javascript jquery caching

我已经读过,使用它的上次修改日期调用文件并让服务器将其解析为原始文件可能是明智的(出于缓存目的)。通过这种方式,您可以将缓存设置为例如10年,并为该文件的某个版本使用静态名称。

然而,由于我也在我的网站上异步加载javascript,我需要能够在javascript / jQuery中执行相同操作。

这是我目前的代码,如何才能获得正在加载的脚本的最后修改日期?

//load new js
if (typeof loadedScripts[url] === 'undefined') {
    $.getScript("javascript/" + url + ".js", function() {
        if (typeof window["load_" + url] !== 'undefined') {
            promises = promises.concat(window["load_" + url](html));
        }
        loadedScripts[url] = 1;
    });
}
else {
    if (typeof window["load_" + url] !== 'undefined') {
        promises = promises.concat(window["load_" + url](html));
    }
}

(它还执行一个名为on load的函数,但这对于这个问题并不感兴趣)

我知道可以使用document.lastModified获取当前文档的上次修改日期,但我不确定它将如何转换为$.getScript来电。

我也启用了缓存:

//set caching to true
$.ajaxSetup({
    cache: true
});

1 个答案:

答案 0 :(得分:1)

出于缓存目的,我宁愿建议使用ETag。 http://en.wikipedia.org/wiki/HTTP_ETag

如果需要,我们会使用它来破坏缓存,并且效果很好。

然而,jQuery的Ajax函数提供了一个ifModified参数: http://api.jquery.com/jquery.ajax/

以下是解释:

  

仅在响应发生更改时才允许请求成功   自上次请求以来。这是通过检查Last-Modified来完成的   头。默认值为false,忽略标头。在jQuery 1.4中   此技术还会检查服务器指定的'etag'以进行捕获   未经修改的数据。

使用此参数,获取脚本的第一个请求将如下所示:

GET /script.js HTTP/1.1
Host: www.orange-coding.net

HTTP/1.1 200 OK
Last-Modified: Wed, 02 Jan 2013 14:20:58 GMT
Content-Length: 4096

第二个请求看起来像这样:

GET /script.js HTTP/1.1
Host: www.orange-coding.net
If-Modified-Since: Wed, 06 Oct 2010 08:20:58 GMT

HTTP/1.1 304 Not Modified