有没有办法让.net核心加载js / css异步?

时间:2018-04-07 13:34:39

标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0

我的项目有一个要加载的谷歌字体css,例如:

<link href='https://fonts.googleapis.com/css?family=Changa|Julius+Sans+One+Raleway' rel='stylesheet'>

然而,也许我的网络不好或任何其他问题,我试过并发现它浪费了很长时间才能加载。

所以我想知道异步加载它。

我知道有一些JavaScript和样式表加载器,例如RequireJS可以做到。

但是,如果我能在没有js的情况下使用.net核心,那么我想这样做吗?

我尝试使用:

@await Html.PartialAsync()

加载包含样式表的cshtml来解决它,但似乎没用。

请您告诉我这是否是.net核心的一种方式?

谢谢。

1 个答案:

答案 0 :(得分:3)

浏览器将异步加载它或更具体地并行加载如果在HTML标头中定义了<link/><script />元素。

与ASP.NET Core 无关。它是浏览器的工作方式。但是有限制。浏览器通常会限制可以对单个域进行的连接数。通常,每个域大约有6到8个连接。

因此,如果您从同一个域获得大量脚本,则可能需要比在其他网络中分发的脚本更长的时间。

使用CDN可能会有所帮助,就像用户曾经访问过包含特定脚本,css或字体的网站一样,它将在那里下载并保存在缓存中。如果用户访问使用完全相同资源的另一个网站,即使网站属于不同的人或公司,他们也只会再次使用缓存。流行的例子是通过CDN加载的流行版jQuery库。

请注意,HTML <link />部分中<script /><header>指令不会并行加载,但不能按顺序。

在ASP.NET Core中,您可以使用

@scripts
{
    <link ... />
}

部分包含特定部分中的脚本(在Razor模板中,它将插入@RenderSection("scripts", required: false)所在的部分), IF 您需要有条件地执行此操作(即仅添加特定视图上的特定链接或脚本标记,否则使用`_Layout.cshtml&#39; - iirc)

@await Html.PartialAsync()

与此无关。它用于服务器端处理,浏览器从不了解它。当您在部分中执行I / O操作(读取数据库,写入文件或通过网络发送/接收内容)时,它用于提高服务器的性能和吞吐量(在高负载下可以处理多少请求)。

修改

在本地开发时,如果您在开发和测试时知道可能有也可能没有Internet连接,则可能需要避免访问CDN。在这种情况下,您可能希望使用<environment>变量根据您的环境进行切换

<environment names="Development">
    <!-- add your local dependencies here pointing the location of your lib folder where npm packages are located such as ~/lib/jQuery/... -->
</environment>
<environment names="Staging,Production">
    <!-- Add your CDN links in here. Configure a fallback if connection doesnt work see https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.taghelpers.linktaghelper?view=aspnetcore-2.0 -->
</environment>