我想知道我是否有办法让MVC5在返回的页面中以缩小的形式包含我的所有javascripts。
即。而不是需要加载外部文件的浏览器,例如allmyminifiedbundledjavascripts.js,这个内容已经包含在<script>
标记的页面中
这应该是:
我无法想出为什么这是一个可怕的想法..如果有任何请赐教我。
答案 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中的工作方式,它是一种失败的原因。捆绑包是一个虚拟文件,在发出请求之前不存在。因此,你必须模仿这种行为才能找到合适的东西。可能更好的方式(虽然更乏味)是独立缩小,然后只是打开并阅读文件而不是请求它。