我对MVC很新,我注意到加载我编写并试图加载的js文件存在很多不一致。
首先,我的网站设置如下:
_Layout.cshtml (main page)
Index.cshtml
_MainMenu.cshtml (partial view)
我在Layout的主体中渲染我的MainMenu。所有jquery脚本都加载在布局的页脚中(我在某处读取了比较喜欢的内容)。
当我渲染视图时,我会在视图顶部加载与该内容相关的任何特定脚本。
加载javascript文件的最佳方式是什么(无论是谷歌的cdn文件还是项目中包含的文件)?我应该将所有这些加载到我的布局页面的标题中,还是只在我使用它们时加载它们?有人可以在mvc应用程序中解释最佳实践并管理/加载/使用javascript文件。
感谢您的投入!
答案 0 :(得分:10)
如果您使用Modernizr,请将其加载到头部。将您的其他脚本(包括jquery)加载到body
的底部(除非另有说明 - 某些脚本需要head
)。理想情况下,您的_Layout.cshtml看起来像:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- head stuff -->
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<!-- your entire body -->
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
</html>
这样就会加载你的jQuery包,然后根据需要在每个页面加载自定义脚本的部分,比如(在其他.cshtml
文件中):
@section Scripts {
@Scripts.Render("~/bundles/myNiceBundle")
}
因此它会将您的自定义脚本放在jQuery下。
Obligatory reason for putting scripts at bottom of page:
脚本引起的问题是它们会阻止并行下载。 HTTP / 1.1规范表明浏览器不再下载 每个主机名并行两个组件。如果您提供图像 从多个主机名,您可以获得两次以上的下载 在平行下。但是,在下载脚本时,浏览器不会 即使在不同的主机名上,也可以启动任何其他下载。