[英]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
如果您不使用SPA
或Partial view/page rendering
,当您从一个视图导航到另一个视图时,将发生完整的回发并且将新内容加载到DOM,在这种情况下,将再次请求所有资源。页面到服务器。 如果像JS/Images/CSS
这样的内容已经被缓存,那么内容将不会从服务器加载而是从缓存中加载,但完整的JavaScript将再次执行。
如果您不希望发生这种情况,请转到部分页面呈现或实施SPA
。
您可以在https://www.asp.net/single-page-application和MSDN上阅读有关SPA的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.