标签: web-optimization

ASP.NET捆绑 - 默认虚拟路径?

据我可以告诉(因为坦率地说文档上System.Web.Optimization非常稀少),捆绑在ASP.NET的工作方式是,你注册一组文件(JavaScript或CSS,相应的ScriptBundleStyleBundle),并将它们与虚拟路径关联; 例如,~/bundles/jqueryui对于所有jQuery UI脚本.稍后,当您在非调试模式下运行时,ASP.NET可以缩小这些文件,并且缩小版本将在您为该包指定的虚拟路径上可用.

默认的bundle setup将一些脚本包注册~/bundles/...为虚拟路径,将一些CSS注册~/Content/css为虚拟路径.我的问题是,这不一致吗?那岂不是更有意义,有一些像~/bundles/js/...~/bundles/css/...?实际上,该~/Content目录实际上是作为真实目录存在的,因此甚至存在名称冲突的可能性.我原以为你希望你的虚拟包路径是默认情况下存在的目录,并不打算在实际的文件系统上创建.是否有一些原因~/Content/css用于我不理解的CSS捆绑虚拟路径?

asp.net bundle web-optimization asp.net-optimization

6
推荐指数
1
解决办法
1898
查看次数

带有绝对路径的ASP.NET MVC Bundle

我在IIS上有虚拟目录,其中包含所有javascript和css文件.是否可以使用Bundles将这些文件包含到ASP.NET MVC应用程序中.

我已经尝试过这样的事情:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include("/public/javascript/jquery-{version}.js"));
Run Code Online (Sandbox Code Playgroud)

但得到了错误:

仅允许应用程序相对URL(〜/ url):

/ public/javascript是IIS上的虚拟目录.

bundle web-optimization asp.net-mvc-4

6
推荐指数
1
解决办法
5469
查看次数

即使在调试模式下,使用WebForms中的bundle也会输出缩小/合并文件

我创建了一系列各种脚本文件,我希望将它们组合在一起/缩小.在隐藏文件我的代码(是的,对不起,这是在VB!)我将它添加到<asp:placeholder /><head>这样的

Me.PlhHeader.Controls.Add(New LiteralControl(Scripts.Render("~/bundles/main").ToHtmlString()))
Run Code Online (Sandbox Code Playgroud)

这将起作用,但它似乎总是输出压缩的缩小版本,即使debug="true"在Web.Config中也是如此.

无论如何,这就是输出: <script src="/bundles/main"></script>

在调试模式下,我需要做些什么来使这个输出成为单独的未压缩文件?


编辑

我还尝试手动设置选项BundleTable.EnableOptimizations = false,它仍然输出单个缩小的脚本标记.我没有想法.


最终编辑

我用一些相关的代码做了一些非常愚蠢的事情,但从技术上讲,捆绑的一切都很好并且工作正常.问题解决了我!

vb.net asp.net webforms web-optimization

6
推荐指数
1
解决办法
6626
查看次数

如何在后台预加载JavaScript和CSS文件,以便在用户进入主页面时将它们准备好在浏览器缓存中?

我希望从登陆页面预加载JS文件和CSS文件,以便在着陆转换后优化主站点负载.我正在寻找有关这方面的信息,最后尝试使用以下方法完成此操作:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'jsUrl');
    xhr.send('');
    xhr = new XMLHttpRequest();
    xhr.open('GET', 'cssUrl');
    xhr.send('');
Run Code Online (Sandbox Code Playgroud)

使用Firefox这很棒,但使用Chrome时,似乎XHR调用缓存在与css和js文件不同的缓存中.我们不使用JQuery,登陆页面必须是轻量级的(负载更少,转换率更高).

您是否有其他方法可以解决原始问题?(预加载组件)

您知道如何让Chrome缓存这些请求吗?

xmlhttprequest cross-browser web-optimization preload browser-cache

5
推荐指数
1
解决办法
3436
查看次数

使用Django进行静态文件版本控制

我正在为我的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技巧.

html django nginx web-optimization

5
推荐指数
1
解决办法
3332
查看次数

如何在png文件中添加"Cache-Control:public"标头?

我最近一直在关注Safari性能审核/建议.一节涉及Cache-Control: public向某些png资源添加标头.

我听说过其他地方的说法,并想知道如何做到这一点.

事实上,从技术上讲,我甚至不确定要实现这一目标需要做些什么.这个文本是以某种方式插入到图像文件中的吗?

png cache-control web-optimization

5
推荐指数
1
解决办法
5144
查看次数

使用ASP.NET Web Optimization和BundleTransformer来正确使用IItemTransform来纠正CSS捆绑中的路径是什么?

我目前正在开发一个项目,该项目使用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);
}
Run Code Online (Sandbox Code Playgroud)

IItemTransform的实现:

public class RewriteUrlTransform : IItemTransform
{
    public string Process(string includedVirtualPath, string input)
    {
        return (input manipulated with proper path replacing …
Run Code Online (Sandbox Code Playgroud)

web-optimization asp.net-mvc-4 bundling-and-minification asp.net-optimization bundletransformer

5
推荐指数
1
解决办法
4101
查看次数

"找到的程序集的清单定义与nuget包上的程序集引用不匹配"

所以我一直在System.Web.Optimization包上得到这个错误

无法加载文件或程序集"System.Web.Optimization"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

asp.net web-optimization nuget asp.net-optimization

5
推荐指数
1
解决办法
1万
查看次数

<webopt:BundleReference>将ScriptBundle呈现为css链接元素

我正在尝试使用新的.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"));
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用新<webopt:BundleReference>控件渲染包:

<webopt:BundleReference ID="AppBundle" runat="server" Path="~/bundles/app"  />
Run Code Online (Sandbox Code Playgroud)

但是当页面呈现时,输出是<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"/>
Run Code Online (Sandbox Code Playgroud)

此控件是否仅用于渲染样式?或者我做错了什么?如何使用webopt控件而不是<%: Scripts.Render() %>语法来呈现脚本包?

javascript asp.net webforms web-optimization

5
推荐指数
1
解决办法
2068
查看次数

CssRewriteUrlTransform不需要

bundles.Add(new StyleBundle("~/a/b/c")
    .Include("~/Content/font-awesome.css", new CssRewriteUrlTransform()));
Run Code Online (Sandbox Code Playgroud)

我有这个捆绑.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开始工作,网页优化的错误?

https://aspnetoptimization.codeplex.com/workitem/166

c# asp.net-mvc web-optimization

5
推荐指数
1
解决办法
1899
查看次数