Javascript Asp.NETMVC在响应期间合并并删除内联脚本

Javascript Asp.NETMVC在响应期间合并并删除内联脚本,javascript,asp.net-mvc-2,httpresponse,minify,Javascript,Asp.net Mvc 2,Httpresponse,Minify,我一直在对我正在开发的几个网站进行性能分析,我注意到一个大问题是内联脚本。对于外部脚本,我编写了一个http处理程序,它将javascript合并、缩小和gzip到一个文件中。然后通过对文件名进行散列存储以供以后重用 我想知道的是(不确定这是否是一个好主意,但我发布帖子是为了获得一些反馈)是否删除了所有包含脚本文本的脚本元素,并将它们合并到一个文件中。然后,我使用与外部脚本相同的过程,并将它们组合成单个脚本 John内联脚本总是进入页面内部,因此每次发布或进出服务器时都需要遍历内联脚本。因为您使

我一直在对我正在开发的几个网站进行性能分析,我注意到一个大问题是内联脚本。对于外部脚本,我编写了一个http处理程序,它将javascript合并、缩小和gzip到一个文件中。然后通过对文件名进行散列存储以供以后重用

我想知道的是(不确定这是否是一个好主意,但我发布帖子是为了获得一些反馈)是否删除了所有包含脚本文本的脚本元素,并将它们合并到一个文件中。然后,我使用与外部脚本相同的过程,并将它们组合成单个脚本


John

内联脚本总是进入页面内部,因此每次发布或进出服务器时都需要遍历内联脚本。因为您使用的是MVC,所以在项目中只包含非突出的脚本文件非常容易,因为您可以对呈现的html进行相当多的控制

你还想退房


Grz,Kris.

内联脚本总是在页面内部,因此需要在每次发布或进出服务器时进行遍历。因为您使用的是MVC,所以在项目中只包含非突出的脚本文件非常容易,因为您可以对呈现的html进行相当多的控制

你还想退房


Grz,Kris.

可以缩小内联Java脚本并将其与外部文件捆绑在一起

正如我在这里提到的

使用模板化的Razor助手,您可以创建一个扩展方法,如 下表:

public static MvcHtmlString AddScriptSource(this HtmlHelper helper, Func<dynamic, HelperResult> source, string key)
{
    string scriptSource = source(null).ToHtmlString();

    // Cache scriptSource here

    return MvcHtmlString.Empty;
}
public static MvcHtmlString AddScriptSource(此HtmlHelper帮助程序,Func源,字符串键)
{
字符串scriptSource=source(null).ToHtmlString();
//在此处缓存脚本源
返回MvcHtmlString.Empty;
}
您会像这样使用它:

@Html.AddScriptSource(@<text>$(document).ready(function() { $('h1').text('The current controller is @ViewContext.RouteData.Values["controller"].ToString()'); });</text>, "test")
@Html.AddScriptSource(@$(document).ready(function(){$('h1').text('当前控制器是@ViewContext.routedData.Values[“controller”].ToString());},,“test”)

可以缩小内联Java脚本并将其与外部文件捆绑在一起

正如我在这里提到的

使用模板化的Razor助手,您可以创建一个扩展方法,如 下表:

public static MvcHtmlString AddScriptSource(this HtmlHelper helper, Func<dynamic, HelperResult> source, string key)
{
    string scriptSource = source(null).ToHtmlString();

    // Cache scriptSource here

    return MvcHtmlString.Empty;
}
public static MvcHtmlString AddScriptSource(此HtmlHelper帮助程序,Func源,字符串键)
{
字符串scriptSource=source(null).ToHtmlString();
//在此处缓存脚本源
返回MvcHtmlString.Empty;
}
您会像这样使用它:

@Html.AddScriptSource(@<text>$(document).ready(function() { $('h1').text('The current controller is @ViewContext.RouteData.Values["controller"].ToString()'); });</text>, "test")
@Html.AddScriptSource(@$(document).ready(function(){$('h1').text('当前控制器是@ViewContext.routedData.Values[“controller”].ToString());},,“test”)

我知道每次请求时我都必须遍历页面,但我想知道删除所有内联脚本并因此删除页面中的大量阻塞的好处是否会超过对性能的影响。史蒂夫·苏德斯(Steve Souders)在他的几次演讲中也说过同样的话。他谈到尽量减少内联脚本,但我想消除它们。我已经实现了一个类似于SquishIt的解决方案,它使用闭包编译器。这取决于带宽和内联脚本的数量。浏览器可以缓存单独的css文件,因此它们只在第一次命中时才计算。然而,内联脚本主要来回遍历该行几次。如果你有很多,它可能会减慢应用程序的速度。我建议您尝试找到最常见的内联脚本片段,然后使用YSlow之类的工具来衡量优化。我一直在使用YSlow的很多度量标准,但我会尝试一下,稍后再发布我的结果。我只需要想一个好办法,尽可能减少将内联脚本从呈现页面中拉出的时间。如果我能在编译时这样做,那将是最好的。我知道我必须在每次请求时遍历页面,但我想知道删除所有内联脚本并因此删除页面中的大量阻塞的好处是否会超过对性能的影响。史蒂夫·苏德斯(Steve Souders)在他的几次演讲中也说过同样的话。他谈到尽量减少内联脚本,但我想消除它们。我已经实现了一个类似于SquishIt的解决方案,它使用闭包编译器。这取决于带宽和内联脚本的数量。浏览器可以缓存单独的css文件,因此它们只在第一次命中时才计算。然而,内联脚本主要来回遍历该行几次。如果你有很多,它可能会减慢应用程序的速度。我建议您尝试找到最常见的内联脚本片段,然后使用YSlow之类的工具来衡量优化。我一直在使用YSlow的很多度量标准,但我会尝试一下,稍后再发布我的结果。我只需要想一个好办法,尽可能减少将内联脚本从呈现页面中拉出的时间。如果我能在编译时这样做,那将是最好的。