为什么我的脚本捆绑在ASP.NET MVC中的每个页面视图中加载



我有点困惑。我在下面有我的_layout.cshtml页面,它有一堆包含.css和.js文件的捆绑包。当我第一次加载站点时,它将通过捆绑包中的每个文件运行。好,好,太好了!但是,在每个新视图上,每个文件中的每个代码都会再次运行!(例如,jQuery,bootstrap等(我设置了突发点以测试这一点,每次我加载新视图时,它们都会受到打击。

我认为浏览器的全部目的是缓存这些文件,以便每次调用新视图时都不会加载?我在这里错过了一些理解吗?我没有正确设置布局吗?它们是否没有加载,但是代码正在通过每个新视图中运行(这就是为什么我所有的突破点都被击中的原因(?

有没有办法进行设置,因此不会发生这种情况,并且当我的客户访问我的主页时,所有文件都会加载一次?我不明白为什么每个.js file(ex。bootstrap(在加载的每个视图上加载!

这是我的布局页面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
  <title>Yogabandy - @ViewBag.Title</title>
  @Styles.Render("~/Content/yogabandy-base/css") 
  @RenderSection("content", required: false) 
  @Scripts.Render("~/bundles/modernizr")
</head>
<body>
  @Html.Partial("_Navbar")

  @RenderBody()
  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDUWFuy0zfuKe4uig_koh3O6SRDaf40gA4&libraries=places" async defer></script>
  @Scripts.Render("~/bundles/jquery") 
  @Scripts.Render("~/bundles/bootstrap") 
  @Scripts.Render("~/bundles/jqueryval") 
  @Scripts.Render("~/bundles/yogabandy-base") 
  @RenderSection("scripts", required: false)
</body>
</html>

在ASP.NET MVC调用(返回(中,视图(假设标准路由的Reload或更改URL(被视为新的"页面"负载。

对于常规的Web浏览AFAIK,页面加载IE时。该页面是典型的HTTP请求,必须从上到下加载,包括重新加载JS和CSS。

由于标准的HTTP请求(例如GET(是无状态的,因此在客户端,浏览器将完全使用HTML,CSS和JS,它被告知使用。它不能"猜测"您可能想要或不想加载的JS。

假设没有使用"缓存",则Web浏览器通常会缓存JS和CSS。

要避免重新加载整个页面,您可以使用AJAX技术,或者现在是单页应用方法:https://www.asp.net/single-page-application

如果您是不是使用SPAPartial view/page rendering的不是,当您从一个视图导航到另一种视图时,将会发生完整的帖子后退,新内容将被加载到该视图DOM,在这种情况下,所有资源将由页面再次要求到服务器。如果像JS/Images/CSS这样的内容已被缓存,则在这种情况下不会从服务器加载,而是从缓存加载,但是完整的JavaScript将再次执行。

如果您不想发生这种情况,请选择部分页面渲染或实现SPA

您可以在此处阅读有关SPA的更多信息https://www.asp.net/single-page-application and MSDN

最新更新