为什么要使用@ Scripts.Render("〜/ bundles/jquery")

Tom*_*res 214 asp.net-mvc-4 asp.net-optimization

如何

@Scripts.Render("~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud)

不同于仅仅引用html中的脚本

<script src="~/bundles/jquery.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

是否有任何性能提升?

yan*_*kun 285

捆绑就是将多个JavaScript或样式表文件压缩成单个文件而不进行任何格式化(也称为缩小),以节省带宽和加载页面的请求数.

例如,您可以创建自己的包:

bundles.Add(New ScriptBundle("~/bundles/mybundle").Include(
            "~/Resources/Core/Javascripts/jquery-1.7.1.min.js",
            "~/Resources/Core/Javascripts/jquery-ui-1.8.16.min.js",
            "~/Resources/Core/Javascripts/jquery.validate.min.js",
            "~/Resources/Core/Javascripts/jquery.validate.unobtrusive.min.js",
            "~/Resources/Core/Javascripts/jquery.unobtrusive-ajax.min.js",
            "~/Resources/Core/Javascripts/jquery-ui-timepicker-addon.js"))
Run Code Online (Sandbox Code Playgroud)

并像这样呈现:

@Scripts.Render("~/bundles/mybundle")
Run Code Online (Sandbox Code Playgroud)

@Scripts.Render("~/bundles/mybundle")超过原生的另一个优点<script src="~/bundles/mybundle" />@Scripts.Render()尊重web.config调试设置:

  <system.web>
    <compilation debug="true|false" />
Run Code Online (Sandbox Code Playgroud)

如果debug="true"那么它将为每个源脚本呈现单独的脚本标记,而不会有任何缩小.

对于样式表,您必须使用StyleBundle和@ Styles.Render().

所有文件都压缩成单个JavaScript或样式表文件并加载到一起,而不是使用单个请求(带有脚本或链接标记)加载每个脚本或样式.

  • 这样做还有一个额外的好处.在调试时,Scripts.Render将输出每个文件非捆绑,这使得本地开发更加困难,但在实时环境中,这将输出捆绑/缩小的结果,这可以导致如上所述的性能提升,但是没有改变任何代码. (39认同)
  • 它存储在缓存中. (15认同)
  • 只是想知道:是否有一个文件存储在该捆绑的某个地方,或者它只存在于内存中? (9认同)
  • 在MVC4(Visual Studio)的"基本"模板中,捆绑包在"BundleConfig.cs"(App_Start文件夹)中准备. (9认同)
  • 如果CDN不可用,它还可以设置为自动使用CDN并回退到本地脚本.这很漂亮. (4认同)
  • 根据其他答案中的评论:考虑异步javascript属性:`Scripts.RenderFormat(@"<script src =""{0}""async> </ script>","〜/ bundles/jquery"` (2认同)

Ter*_*ato 51

您还可以使用:

@Scripts.RenderFormat("<script type=\"text/javascript\" src=\"{0}\"></script>", "~/bundles/mybundle")
Run Code Online (Sandbox Code Playgroud)

在需要使用Charset,Type等的场景中指定输出的格式.

  • ...或者添加`async`属性. (13认同)
  • `@Scripts.RenderFormat("&lt;script type=\"text/javascript\" async src=\"{0}\"&gt;&lt;/script&gt;", "~/bundles/mybundle")` (7认同)
  • 对于加载requirejs模块也非常有用 (3认同)