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

时间:2016-08-17 09:38:54

标签: javascript jquery twitter-bootstrap caching asp.net-mvc-5

使用: C#MVC5和Jquery

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

$.ajax({
            url: filterUrl,
            contentType: 'application/html',
            success: function (filterContent) {
                $("#divReportFilterModalBody").html(filterContent);
                LoadFilterScript(SCOPESTRINGS[currentReport.Scope]);
            },....

下一步是为该过滤器页面加载必要的javascript,因为您无法在局部视图上使用脚本。为此,我还从服务器请求脚本如下:

 $.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");

    }

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

  1. 脚本不大,是否更好的做法是先加载它们而不是根据需要获取它们?我根据需要加载它们的原因是因为它们可能没有被调用而且不想加载一堆不会被使用的脚本
  2. 不是缓存它们是一个好主意,因为用户可以多次使用相同的过滤器,在我目前的情况下,脚本每次都会被加载?或者我应该缓存脚本并找出一种不再加载它的方法吗?
  3. 我也不是100%清楚脚本缓存。加载后脚本在这种情况下会发生什么?如果我打电话给服务器,我可以看到它再次加载,是否删除了以前的脚本?因为当我查看firebug上的脚本选项卡时,它们仍然列在那里?这会在页面上引起冲突吗?
  4. 在这种情况下,最佳做法是什么?

    由于

    编辑:我一直在研究这个话题,发现这篇文章(旧的,但在我看来仍然非常相关)。 enter link description here

1 个答案:

答案 0 :(得分:0)

  1. 如果你真的需要它,只加载东西总是一个好主意。当文件不是很大时,也许你可以将它们组合起来并将它们包括在内。

  2.   

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

    烨。

  3. 当您加载脚本(没有任何查询)时,浏览器会缓存它。但这与再次加载脚本时发生的情况无关。服务器“再次”提供它或者浏览器使用缓存的服务器。然而,脚本然后再次执行。即使你从dom中删除它 - 一旦加载的脚本就在那里。

  4. 也许你可以像这样包装你的脚本:

    run:
    Successfully recorded login timestamp
    []
    [[Ljava.lang.Object;@35fa3ff2]
    [[Ljava.lang.Object;@407c448d, [Ljava.lang.Object;@1e78a60e]
    

    然后您可以根据需要多次加载脚本 - 它只会“执行”一次。