标签: web-optimization

CssRewriteUrlTransform有或没有虚拟目录

我们在我们的站点中使用MVC Bundling,CssRewriteUrlTransform确保图像URL在动态bundle css文件中工作.

但这只适用于不使用虚拟目录的情况,即

http://localhost/VirttualDir不行,但http://localhost/确实如此.这是因为CssRewriteUrlTransform在重写URL时,转换不会考虑虚拟文件夹.因此,如果图像真实路径是localhost/vdir/content/img/foo.png它将重写它localhost/content/img/foo.png是错误的

c# web-optimization asp.net-mvc-4 bundling-and-minification

61
推荐指数
3
解决办法
2万
查看次数

如何在CSS中使用3位颜色代码而不是6位颜色代码?

我最近浏览了我的CSS文件并将所有6位十六进制代码切换为简单的3位代码(例如,我#FDFEFF缩短为#FFF).它渲染的颜色几乎与以前完全相同,在我看来,部件之间相当无用,删除它们在我的CSS文件中保存了整整300个字节.

你使用哪个版本是否重要?我很少遇到只使用3位代码的网站(或者我想我从来没有碰过那些代码的网站).在6位代码上使用3位代码仍然完全有效,或者我们是否应该使用完整的6位代码?

css hex colors web-optimization

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

未调用CssRewriteUrlTransform

我刚刚在VS 2013 RTM上创建了一个新的MVC 5应用程序.出于某种原因,我的CSS文件中的背景图片网址没有被转换.

因此,为了调试该问题,我创建了自定义CssRewriteUrlTransform包装器.我发现我的断点没有被调用.

这就是我在BundleConfig.cs中的内容

using System.Web.Optimization;

namespace Utilities.Web
{
    public class BundleConfig
    {
        private const string JQUERY_CDN_URL = "//code.jquery.com/jquery-1.10.1.min.js";

        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.UseCdn = true;
            BundleTable.EnableOptimizations = true;

            bundles.Add(new StyleBundle("~/css/coming-soon")
                .Include("~/Content/Site/coming-soon.css",
                    new CssRewriteUrlTransformWrapper()));

            bundles.Add(new ScriptBundle("~/js/coming-soon")
                .Include("~/Scripts/jquery.placeholder.js")
                .Include("~/Scripts/Site/coming-soon.js"));

            bundles.Add(new ScriptBundle("~/js/jquery", JQUERY_CDN_URL)
            {
                CdnFallbackExpression = "window.jQuery"
            }.Include("~/Scripts/jquery-{version}.js"));
        }
    }

    public class CssRewriteUrlTransformWrapper : IItemTransform
    {
        public string Process(string includedVirtualPath, string input)
        {
            return new CssRewriteUrlTransform().Process(includedVirtualPath, input);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc web-optimization asp.net-mvc-5

27
推荐指数
3
解决办法
6713
查看次数

webopt:bundlereference如何在ASP.Net中工作?

在Visual Studio 13的ASP.Net Web表单的默认模板中,有一个标签webopt:

<webopt:bundlereference runat="server" path="~/Content/css" />
Run Code Online (Sandbox Code Playgroud)

搜索后,似乎是捆绑和缩小.标签有官方文档吗?我找不到一个.具体来说我想知道,它是如何工作的?如果Content文件夹中已存在缩小文件,则它将获取该文件.我该如何改变这种行为?路径值如何转换,因为Content文件夹中没有文件夹css?

asp.net webforms web-optimization bundling-and-minification

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

在网页上混合安全和非安全内容 - 这是一个好主意吗?

我正试图想出加快我的安全网站的方法.因为需要加载很多CSS映像,所以它可能会降低站点的速度,因为浏览器不会将安全资源缓存到磁盘,并且必须比实际需要更频繁地检索它们.

我考虑的一件事可能是将基于样式的图像和javascript库移动到非安全的子域,以便浏览器可以缓存这些不会带来安全风险的资源(渐变不是完全敏感的材料).

我想看看别人怎么想做这样的事情.这是一个可行的想法,还是应该以其他方式优化我的网站,比如使用CSS sprite-maps等来减少请求和带宽?

web-optimization

9
推荐指数
1
解决办法
2491
查看次数

ASP.NET System.Web.Optimization:捆绑jQueryUI CSS

我试图在一个请求中捆绑jQueryUI.

Global.asax中:

var cssjQuery = new StyleBundle("~/Content/BundleCSS/jQuery");
cssjQuery.IncludeDirectory("~/Content/themes/base", "*.css");
Run Code Online (Sandbox Code Playgroud)

布局:

<link href="@Styles.Url("~/Content/BundleCSS/jQuery")" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

文件夹结构:

  • CSS文件: Content/themes/base/*.cs
  • 图像文件:内容/主题/基础/图像/*.png

现在的问题是无法加载图像,因为没有文件夹"BundleCSS":

http://localhost:64648/Content/BundleCSS/images/ui-bg_flat_75_ffffff_40x100.png
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

c# bundle jquery-ui web-optimization asp.net-mvc-3

9
推荐指数
1
解决办法
3102
查看次数

有没有办法在运行时动态更新asp.net mvc包内容?

我是我的应用程序的ASP.NET MVC v4,我正在使用Web优化功能(脚本和样式的捆绑和缩小).

现在,我理解的是(如果错误请纠正我),优化框架将在编译时查看包含的文件并进行配置.它将根据内容创建版本号(v = something).每次内容更改时,它都会重新创建版本哈希,客户端将获得更新的文件.

现在,有没有办法完成以下任务

[1]更新我服务器中js文件中的内容,并将更新后的内容提供给客户端,而无需重新构建和重新启动应用程序(我不是在这里更改捆绑配置,只是更新脚本中的文件内容)?

[2]更新脚本配置本身(例如,向捆绑包添加新脚本),并将其提供给客户端,而无需重新编译和重新启动应用程序?或者,至少没有重新编译?(我知道,通常我们在cs文件中定义包,但想知道是否有出路!)

[3]有没有办法使用我自己的版本号(比如来自配置文件,v = myCustomScriptVersion)而不是自动生成的版本哈希?

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

8
推荐指数
1
解决办法
7571
查看次数

ASP.NET MVC4如何在一个规则中一起创建带有js和css的bundle?

我有一个superfish jquery插件,它有4个js和1个css:

<script src="~/Scripts/JQ_Addons/SuperFish/jquery.bgiframe.min.js"></script>
<script src="~/Scripts/JQ_Addons/SuperFish/hoverIntent.js"></script>
<script src="~/Scripts/JQ_Addons/SuperFish/supersubs.js"></script>
<script src="~/Scripts/JQ_Addons/SuperFish/superfish.js"></script>
<link href="~/Scripts/JQ_Addons/SuperFish/superfish.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

我想为所有这些创建一个包,但是当我调用bundles.Add()时,它只能添加一种类型的包,ScriptBundle或者StyleBundle.

bundles.Add(new ScriptBundle("~/bundles/superfish").Include(
            "~/Scripts/JQ_Addons/SuperFish/jquery.bgiframe.min.js",
            "~/Scripts/JQ_Addons/SuperFish/hoverIntent.js",
            "~/Scripts/JQ_Addons/SuperFish/supersubs.js",
            "~/Scripts/JQ_Addons/SuperFish/superfish.js")); // I can not add css here
Run Code Online (Sandbox Code Playgroud)

在视图中,我只能选择渲染一种类型的包:

@Styles.Render or @Script.Render
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:是否可以只创建一个包含js和css的捆绑规则?在我看来,我想要的东西:

@Bundles.Render("~/bundles/superfish")
Run Code Online (Sandbox Code Playgroud)

bundle web-optimization asp.net-mvc-4

7
推荐指数
1
解决办法
7077
查看次数

在ASP.NET MVC4应用程序中引用BundleConfig.cs中的其他包

我正在开发一个MVC4应用程序,我正在使用WebOptimization来完成所有资源处理(cat和min).我有一些非常相似的页面,但是逐页需要一些不同的样式.

所以,我试图在另一个包(页面特定样式)中引用一个包(基本样式),我没有太多运气.这是我在捆绑配置中的内容:

bundles.Add(new StyleBundle("~/bundles/css/search").Include(
  "~/Content/css/partials/grid-controls.css",
  "~/Content/css/partials/grid.css",
  "~/Content/css/views/search.css"));

bundles.Add(new StyleBundle("~/bundles/css/searchtrees").Include(
  "~/bundles/css/search",
  "~/Content/css/views/search/trees.css"));
Run Code Online (Sandbox Code Playgroud)

在搜索树页面上,我得到了trees.css,但没有来自基本搜索CSS包.

如何在第二个包中引用第一个包?我确定有一种方法,只是不太熟悉捆绑.

web-optimization asp.net-mvc-4

7
推荐指数
1
解决办法
1601
查看次数

设置远期未来会在代码中过期 - ASP.NET

有没有办法可以用ASP.NET以编程方式在代码中设置Expires Header?具体来说,我需要将它设置在整个文件夹和所有子文件夹上,并且该文件夹仅包含静态文件(JavaScript,CSS,图像等)而不包含aspx文件,因此我不能只将一些代码添加到aspx代码中-behind page_load.

我通常可以直接在IIS中设置它.但服务器被客户端锁定(我只有FTP访问Web应用程序目录进行部署),并且让客户端在IIS上设置Expires Header将需要一个冰河时代(它是一个公共部门/政府网站).

我按照雅虎的建议http://developer.yahoo.com/performance/rules.html#expires进行前端优化的原因

更新:我试过创建一个HttpModule ......

public class FarFutureExpiresModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;

        string url = context.Request.Url.ToString();

        if (url.Contains("/StaticContent/"))
        {
            context.Response.Cache.SetExpires(DateTime.Now.AddYears(30));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这看起来不起作用.我在代码上放置了一个断点,它可以正常运行.但是,当我在Firefox中分析原始HTTP标头信息时,未设置过期值.请注意我正在使用BeginRequest,但我也尝试连接到PostReleaseRequestState和PreSendRequestHeaders,它们似乎也不起作用.有任何想法吗?

更新2:好的,所以看起来因为我正在运行IIS6,HttpModules不会运行静态文件,只运行动态文件(*.aspx等).感谢RickNZ的帮助,我提出了以下IHttpModule:

public class FarFutureExpiresModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, …
Run Code Online (Sandbox Code Playgroud)

c# asp.net iis optimization web-optimization

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