3

我有点困惑。我在下面有我的 _layout.cshtml 页面,它有一堆包含 .css 和 .js 文件的包。当我第一次加载站点时,它会遍历捆绑包中的每个文件。不错不错不错!但随后在每个新视图中,每个文件中的每一行代码都会再次运行!(例如 jQuery、bootstrap 等)我设置了断点来测试它,每次加载新视图时它们都会被击中。

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

有没有办法设置它,这样就不会发生这种情况,并且当我的客户访问我的主页时,所有文件都会加载一次?我不明白为什么每个 .js 文件(例如引导程序)都会加载到每个加载的视图上!

这是我的布局页面

<!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>
4

2 回答 2

2

在 ASP.Net MVC 调用(返回)视图(重新加载或更改 URL 假设标准路由)被认为是一个新的“页面”加载。

对于页面加载时的常规网页浏览AFAIK,即。一个典型的 http(s) 请求,页面必须从上到下加载,包括重新加载 JS 和 CSS。

因为标准的 http 请求(例如 GET)是无状态的,所以在客户端,浏览器将完全使用它被告知要使用的 HTML、CSS 和 JS。它无法“猜测”你可能想要或不想加载的 JS。

Web 浏览器通常会缓存 JS 和 CSS,假设没有使用“缓存清除”。

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

于 2018-02-25T05:24:48.790 回答
1

如果您使用SPAor Partial view/page rendering,当您从一个视图导航到另一个视图时,将发生完整的回发,并且新内容将加载到 DOM,在这种情况下,页面将再次向服务器请求所有资源。如果内容 likeJS/Images/CSS已经被缓存,在这种情况下,内容不会从服务器加载,而是从缓存中加载,但完整的 JavaScript 将再次执行。

如果您不希望发生这种情况,请进行部分页面渲染或实施SPA.

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

于 2018-02-25T05:20:35.890 回答