在返回的html页面中插入缩小的javascript

时间:2014-12-04 14:47:21

标签: c# html asp.net-mvc-5

我想知道我是否有办法让MVC5在返回的页面中以缩小的形式包含我的所有javascripts。

即。而不是需要加载外部文件的浏览器,例如allmyminifiedbundledjavascripts.js,这个内容已经包含在<script>标记的页面中

这应该是:

  1. 由于请求较少,页面加载速度更快
  2. 在运行脚本之前无需真正等待文档加载..
  3. 谷歌正在这样做,我想知道我是否喜欢它(请查看google.com上的来源)。
  4. 我无法想出为什么这是一个可怕的想法..如果有任何请赐教我。

1 个答案:

答案 0 :(得分:1)

在缓存文件和内联文件之间需要权衡。与每次必须下载的内联脚本标记相比,缓存的大文件在后续对同一页面的请求中加载速度会更快。

Html 5支持对脚本文件的异步请求,因此如果您要显示不依赖于脚本的有意义内容,则可以在标记上指定async

Google is using some module for Apache and Nginx并演示了他们如何以编程方式内联它们。

否则,这是一个未经测试的小代码,可以完成您想要的...

var bundleURL = Scripts.Url("~/bundles/jquery");
var fullUrl = (Request.Url.GetLeftPart(UriPartial.Authority) + bundleURL.ToString());
var client = new WebClient();
var minJS = client.DownloadString(fullUrl);

ViewBag.Javascript = minJS;

<script type="text/javascript">
    @ViewBag.Javascript
</script>

是的,最小化请求的目标导致另一个请求。由于捆绑在MVC中的工作方式,它是一种失败的原因。捆绑包是一个虚拟文件,在发出请求之前不存在。因此,你必须模仿这种行为才能找到合适的东西。可能更好的方式(虽然更乏味)是独立缩小,然后只是打开并阅读文件而不是请求它。