繁体   English   中英

为什么我的脚本包会加载ASP.Net MVC中的每个页面视图?

[英]Why do my script bundles load with every page view in ASP.Net MVC?

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

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

有没有办法设置它所以这不会发生,所有文件都加载一次当我的客户访问我的主页? 我不明白为什么每个.js文件(例如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中调用(返回)视图(重新加载或更改URL,假设标准路由)被视为新的“页面”加载。

对于传统的网页浏览AFAIK,当页面加载即。 一个典型的http(s)请求,页面必须从上到下加载,包括重新加载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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM