使用Javascript进行脚本缓存的最佳实践

使用Javascript进行脚本缓存的最佳实践,javascript,jquery,twitter-bootstrap,caching,asp.net-mvc-5,Javascript,Jquery,Twitter Bootstrap,Caching,Asp.net Mvc 5,使用: C#MVC5和Jquery 我有一个可能使用多个不同过滤器的过滤器屏幕。根据用户选择的内容,我调用服务器并将部分视图加载到引导模式中,如下所示: $.ajax({ url: filterUrl, contentType: 'application/html', success: function (filterContent) { $("#divReportFilterModalBod

使用: C#MVC5和Jquery

我有一个可能使用多个不同过滤器的过滤器屏幕。根据用户选择的内容,我调用服务器并将部分视图加载到引导模式中,如下所示:

$.ajax({
            url: filterUrl,
            contentType: 'application/html',
            success: function (filterContent) {
                $("#divReportFilterModalBody").html(filterContent);
                LoadFilterScript(SCOPESTRINGS[currentReport.Scope]);
            },....
 $.getScript(scopeString + "FilterJavaScript",
            function () {
下一步是为该过滤器页面加载必要的javascript,因为在局部视图上不能有脚本。为此,我还从服务器请求脚本,如下所示:

$.ajax({
            url: filterUrl,
            contentType: 'application/html',
            success: function (filterContent) {
                $("#divReportFilterModalBody").html(filterContent);
                LoadFilterScript(SCOPESTRINGS[currentReport.Scope]);
            },....
 $.getScript(scopeString + "FilterJavaScript",
            function () {
mvc控制器:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult ScopeFilterJavaScript()
    {
        return
File(System.IO.File.ReadAllBytes(Server.MapPath("~/Scripts/.../filterPartial.js")), "text/javascript");

    }
因为用户一次只能使用一个过滤器,并且可能使用也可能不使用多个过滤器,所以我的问题是:

  • 脚本不是很大,最好提前加载它们,而不是根据需要获取它们?我之所以按需要加载它们,是因为它们可能不会被调用,也不想加载一堆无法使用的脚本
  • 缓存它们不是一个好主意,因为用户可以多次使用相同的过滤器,并且在我当前的情况下,每次都会加载脚本?或者我应该缓存脚本并找出一种不再次加载它的方法
  • 我对脚本缓存也不是100%清楚。在本例中,脚本加载后会发生什么情况?如果我调用服务器,我可以看到它再次被加载,以前的脚本是否被删除?因为当我查看firebug上的脚本选项卡时,它们仍然列在那里?这会导致页面上出现冲突吗
  • 在这种情况下,最佳做法是什么

    谢谢

    编辑:我对这个话题做了进一步的研究,发现了这篇文章(很老,但在我看来仍然非常相关)

  • 如果你真的需要的话,最好只装东西。当文件不是那么大的时候,也许你可以把它们合并在一起,把它们放在第一位

  • 或者我应该缓存脚本并找出一种不再次加载它的方法

    是的

  • 加载脚本(无任何查询)时,浏览器会将其缓存。但这与再次加载脚本时发生的情况无关。要么服务器“再次”交付,要么浏览器使用缓存的服务器。尽管如此,脚本还是会再次执行。即使您将其从dom中删除,只要加载脚本就可以了

  • 也许您可以这样包装您的脚本:

    if (!window.foobarLoaded) {
      // your script content
      window.foobarLoaded = true;
    }
    

    然后,您可以随意多次加载脚本-它只“执行”一次。

    只是一个提示:删除脚本不会“卸载”它们。谢谢Alex。我看到了一篇关于测试加载脚本的文章,我将使用类似的东西。