脚本包每次生成不同的标识符?

Script bundle generates different identifier every time?

所以这个项目我正在实施捆绑 (System.Web.Optimization) 以最大限度地减少样式和脚本的加载时间。我的经理目前正在寻找进一步缩短加载时间的方法,因为加载时间仍然太长,他认为其中一个原因是 Bundling 无法正常工作。所以我一直在监控开发人员控制台上脚本的加载时间,看看是否由于某种原因未启用缓存,虽然一切看起来都很好,但我注意到的唯一奇怪的事情是标识符有一个不同的 "second token" 每次重新加载同一页面。像这样:

http://mypage.com/bundles/Kendo?v=Ly4JCrjDqtOYRbxqbD1I-ubxLYyNieOlYxSxoMmPLYA1&_=1420587597283
http://mypage.com/bundles/Kendo?v=Ly4JCrjDqtOYRbxqbD1I-ubxLYyNieOlYxSxoMmPLYA1&_=1420587659994
http://mypage.com/bundles/Kendo?v=Ly4JCrjDqtOYRbxqbD1I-ubxLYyNieOlYxSxoMmPLYA1&_=1420589994757

标识符始终相同,但末尾的令牌每次都不同。我环顾四周,试图看看是否在其他地方解决了这个问题,但没有找到任何东西。所以我想问的是,这是正常行为吗?不用担心吗?

如果有帮助,这是实现的代码:

    public class BundleConfig
    {
        // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
        public static void RegisterBundles(BundleCollection bundles)
        {
            BundleTable.EnableOptimizations = true;

            bundles.Add(new ScriptBundle("~/bundles/Kendo").Include(
                   "~/Scripts/kendo/2014.3.1119/kendo.all.min.js",
                   "~/Scripts/kendo/2014.3.1119/kendo.aspnetmvc.min.js"));
        }
    }

@Scripts.Render("~/bundles/Kendo")

在其各自 html 页面的元部分。

查看加载时间时需要考虑很多因素。

首先,如果您不确定捆绑在做什么,或者您担心每次请求都会生成捆绑,请查看您的 IIS 日志并查看捆绑请求是否收到 304 响应(内容未更改) 这会告诉您捆绑包已按预期被浏览器缓存,或者它是否确实每次都在制定新的捆绑包。

确保您使用支持缓存的浏览器,我知道在 Chrome 中您可以将其关闭以帮助进行调试,这会扭曲结果。

此外,请确保您在 web.config 中 运行 compilation debug="false" 以利用 Razor 视图缓存,而不是通过 IO 访问来查找视图每个请求。

检查您是否没有盲目地在每个视图上加载每个包,而不管视图的用途如何。例如,如果您有任何处理验证用户输入的包,请确保仅在这些视图接受用户输入时加载这些包,将它们保存在只读视图上加载。

我会推荐类似 Glimpse 的工具来帮助您诊断您的加载时间花在了哪里。它可以帮助您确定可能浪费的地方。

如果您在控制器级别使用授权属性,请确保对任何不需要授权的操作使用匿名,以确保您不会花时间授权不需要的用户。

最后,检查您的 IIS 设置以确保您只加载了您需要的模块并打开了压缩功能以加快内容交付。