3

我对 MVC 相当陌生,我注意到加载我编写并尝试加载的 js 文件时存在很多不一致之处。

首先,这是我的网站设置方式:

    _Layout.cshtml (main page)
Index.cshtml
_MainMenu.cshtml (partial view)

我将 MainMenu 呈现在 Layout 的主体中。所有 jquery 脚本都加载在布局的页脚中(我在某个地方读到了更可取的)。

当我渲染视图时,我会在视图顶部加载与该内容相关的任何特定脚本。

加载javascript文件的最佳方法是什么(无论是来自谷歌的cdn文件还是我的项目中包含的文件)?我应该将它们全部加载到我的布局页面的标题中,还是在我使用它们时加载它们?有人可以解释最佳实践并在 mvc 应用程序中管理/加载/使用 javascript 文件。

谢谢您的意见!

4

1 回答 1

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 下。

将脚本放在页面底部的强制性原因

脚本引起的问题是它们会阻止并行下载。HTTP/1.1 规范建议浏览器每个主机名并行下载不超过两个组件。如果您从多个主机名提供图像,则可以同时进行两次以上的下载。但是,在下载脚本时,浏览器不会启动任何其他下载,即使在不同的主机名上也是如此。

于 2013-02-09T03:36:30.653 回答