据我可以告诉(因为坦率地说文档上System.Web.Optimization非常稀少),捆绑在ASP.NET的工作方式是,你注册一组文件(JavaScript或CSS,相应的ScriptBundle和StyleBundle),并将它们与虚拟路径关联; 例如,~/bundles/jqueryui对于所有jQuery UI脚本.稍后,当您在非调试模式下运行时,ASP.NET可以缩小这些文件,并且缩小版本将在您为该包指定的虚拟路径上可用.
默认的bundle setup将一些脚本包注册~/bundles/...为虚拟路径,将一些CSS注册~/Content/css为虚拟路径.我的问题是,这不一致吗?那岂不是更有意义,有一些像~/bundles/js/...和~/bundles/css/...?实际上,该~/Content目录实际上是作为真实目录存在的,因此甚至存在名称冲突的可能性.我原以为你希望你的虚拟包路径是默认情况下不存在的目录,并不打算在实际的文件系统上创建.是否有一些原因~/Content/css用于我不理解的CSS捆绑虚拟路径?
我在IIS上有虚拟目录,其中包含所有javascript和css文件.是否可以使用Bundles将这些文件包含到ASP.NET MVC应用程序中.
我已经尝试过这样的事情:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include("/public/javascript/jquery-{version}.js"));
但得到了错误:
仅允许应用程序相对URL(〜/ url):
/ public/javascript是IIS上的虚拟目录.
我创建了一系列各种脚本文件,我希望将它们组合在一起/缩小.在隐藏文件我的代码(是的,对不起,这是在VB!)我将它添加到<asp:placeholder />在<head>这样的
Me.PlhHeader.Controls.Add(New LiteralControl(Scripts.Render("~/bundles/main").ToHtmlString()))
这将起作用,但它似乎总是输出压缩的缩小版本,即使debug="true"在Web.Config中也是如此.
无论如何,这就是输出: <script src="/bundles/main"></script>
在调试模式下,我需要做些什么来使这个输出成为单独的未压缩文件?
编辑
我还尝试手动设置选项BundleTable.EnableOptimizations = false,它仍然输出单个缩小的脚本标记.我没有想法.
我用一些相关的代码做了一些非常愚蠢的事情,但从技术上讲,捆绑的一切都很好并且工作正常.问题解决了我!
我希望从登陆页面预加载JS文件和CSS文件,以便在着陆转换后优化主站点负载.我正在寻找有关这方面的信息,最后尝试使用以下方法完成此操作:
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'jsUrl');
    xhr.send('');
    xhr = new XMLHttpRequest();
    xhr.open('GET', 'cssUrl');
    xhr.send('');
使用Firefox这很棒,但使用Chrome时,似乎XHR调用缓存在与css和js文件不同的缓存中.我们不使用JQuery,登陆页面必须是轻量级的(负载更少,转换率更高).
您是否有其他方法可以解决原始问题?(预加载组件)
您知道如何让Chrome缓存这些请求吗?
xmlhttprequest cross-browser web-optimization preload browser-cache
我正在为我的CSS/Javascript设置远期过期标题,以便浏览器在缓存后不会再次请求文件.我还有一个简单的版本控制机制,这样如果文件发生变化,客户端就会知道.
基本上我有一个模板标签,我做了类似的事情
<script type="text/javascript" src="{{ MEDIA_URL }}{% versioned "javascript/c/c.js" %}"></script>
这将成为
<script type="text/javascript" src="http://x.com/media/javascript/c/c.min.js?123456"></script>.
模板标记打开一个文件javascript/c/c.js.v,在该文件中找到版本号并将其附加到查询字符串.该版本由shell脚本(现在手动运行,可能会添加预提交挂钩)生成,该脚本检查文件是否已更改(使用git diff).
这一切都很好,除了:
我想为图像实现相同类型的版本控制.但是图像可以从CSS引用 - 这是一个静态文件(由nginx提供) - 因此没有模板标记.
什么是更好的文件版本控制方法?
或者,我正在考虑用中间件替换模板标签,中间件在返回响应之前更改所有链接.这比模板标签更好,模板标签可能会被错误地省略.但仍然无法解决CSS引用的图像问题.
此外,我知道将版本作为查询字符串的一部分可能会导致某些代理没有缓存文件的麻烦 - 所以我考虑将版本作为文件名的一部分 - 例如javascript/c/c.123456.js.
注意:看起来没有办法使用Django解决这个问题(显然 - 因为我甚至没有通过Django提供CSS).但必须有一个解决方案,可能涉及一些nginx技巧.
我最近一直在关注Safari性能审核/建议.一节涉及Cache-Control: public向某些png资源添加标头.
我听说过其他地方的说法,并想知道如何做到这一点.
事实上,从技术上讲,我甚至不确定要实现这一目标需要做些什么.这个文本是以某种方式插入到图像文件中的吗?
我目前正在开发一个项目,该项目使用ASP.NET Web Optimization库(v 1.1.0-Beta1)和Bundle Transformer扩展(v 1.7.3-Beta1用于核心,1.7.0-Beta1用于LESS)用于将LESS转换为CSS.基于Web搜索,CSS(及更少)中的路径似乎是一个常见问题,在大多数情况下,建议手动修改CSS并完成它.但是,由于我们的开发和生产环境之间的差异,并且没有拥有受影响的CSS,这样的解决方案是不可行的.
似乎存在两种解决方案.第一种是将捆绑定义的虚拟目录覆盖在包含内容的实际目录上.对我来说,这似乎是一个糟糕的选择.
其次,我选择的路线是使用IItemTransform这样的CssRewriteUrlTransform(在这篇文章中提到.即使这个解决方案也有它的局限性.因此我试图编写自己的ItemTransformer但是看起来它的执行结果被忽略了以下列方式使用时:
public static void RegisterBundles(BundleCollection bundles)
{
    /* among other work pass in IItemTransformer to fix paths */
    var styleBundle = new StyleBundle("~/bundles/css/styles")
        .Include(...)
        .Include("~/Content/less/font-awesome.less", new RewriteUrlTransform())
        .Include(...);
    styleBundle.Transforms.Add(new CssTransformer());
    styleBundle.Orderer = new NullOrderer();
    bundles.Add(styleBundle);
}
IItemTransform的实现:
public class RewriteUrlTransform : IItemTransform
{
    public string Process(string includedVirtualPath, string input)
    {
        return (input manipulated with proper path replacing …web-optimization asp.net-mvc-4 bundling-and-minification asp.net-optimization bundletransformer
所以我一直在System.Web.Optimization包上得到这个错误
无法加载文件或程序集"System.Web.Optimization"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我正在尝试使用新的.net 4.5 webforms控件来渲染我的materpage中的包.我在BundleConfig.cs中定义了一个scriptbundle,如下所示:
bundles.Add(new ScriptBundle("~/bundles/app").Include(
    "~/Scripts/underscore.js",
    "~/Scripts/backbone.js",
    "~/Scripts/app/app.js",
    "~/Scripts/app.validator.js",
    "~/Scripts/app/views/home.js",
    "~/Scripts/app/views/about.js",
    "~/Scripts/app/views/contact.js",
    "~/Scripts/app/controls/hello.js",
    "~/Scripts/app/init.js"));
然后我尝试使用新<webopt:BundleReference>控件渲染包:
<webopt:BundleReference ID="AppBundle" runat="server" Path="~/bundles/app"  />
但是当页面呈现时,输出是<link>标签,而不是标签:
<link href="/Scripts/underscore.js" rel="stylesheet"/>
<link href="/Scripts/backbone.js" rel="stylesheet"/>
<link href="/Scripts/app/app.js" rel="stylesheet"/>
<link href="/Scripts/app/views/home.js" rel="stylesheet"/>
<link href="/Scripts/app/views/about.js" rel="stylesheet"/>
<link href="/Scripts/app/views/contact.js" rel="stylesheet"/>
<link href="/Scripts/app/controls/hello.js" rel="stylesheet"/>
<link href="/Scripts/app/init.js" rel="stylesheet"/>
此控件是否仅用于渲染样式?或者我做错了什么?如何使用webopt控件而不是<%: Scripts.Render() %>语法来呈现脚本包?
bundles.Add(new StyleBundle("~/a/b/c")
    .Include("~/Content/font-awesome.css", new CssRewriteUrlTransform()));
我有这个捆绑.font-awesome css有一个url,定义为url('../fonts/fontawesome-webfont.eot?v=4.0.3')当css位于下面时有效,"~/Content/font-awesome.css"但现在它位于"〜/ a/b"下面
但是CssRewriteUrlTransform没有开始并改写路径url('../../fonts/fontawesome-webfont.eot?v=4.0.3')
更新:如果我删除.min文件它CssRewriteUrlTransform开始工作,网页优化的错误?
web-optimization ×10
asp.net ×4
bundle ×2
webforms ×2
asp.net-mvc ×1
c# ×1
django ×1
html ×1
javascript ×1
nginx ×1
nuget ×1
png ×1
preload ×1
vb.net ×1