探寻ASP.NET MVC鲜为人知的奥秘(1):对LESS的支持_html/css_WEB-ITnose
在ASP.NET MVC3中(从那时开始),我们拥有了对js和css等文件的捆绑(Bundling)和压缩(Minification)的能力,这是ASP.NET性能优化工作的一部分。
想一下很久以前,我们在mvc2的时代,我们使用这样的方式引入js和css文件:
<script type="text/javascript" src="@Url.Content("~/Script/Script.js")"></script>
刚开始没有什么问题,而随着我们项目的越来越大,需要引入的资源文件越来越多的时候,我们就难免会遇到以下这些问题:
- 需要在Production环境将这些文件替换为压缩版本(e.g jQuery.xxx.min.js)
- CSS文件需要借助其他工具去压缩
- 引入的文件越来越多,难以管理
- 大量的资源文件导致浏览器加载缓慢
而在ASP.NET MVC3空出世后,我们就再也不需要受到以上这些困扰了。
首先,当我们开启了Optimizations开关后,当Web.config文件中的System.Web/Compilation@debug设置为false的时候(在生产环境下,需要设置为false),我们在浏览器端获取到的资源文件将会是经过压缩和捆绑的。这样做的好处是:
- 减少了服务器端的流量,给服务器退烧(通过压缩)
- 自动缓存资源文件,服务器端不更改的话,不会重新加载(通过缓存机制)
- 由于大多浏览器限制了对一个host同时连接数量,所以加快了网站访问速度(通过捆绑)
以下是一个简单的示例,我这里用一个新建的ASP.NET MVC项目进行演示:
在新建一个MVC项目后,打开App_Start/BundleConfig.cs文件,可以看到一个静态的RegisterBundles方法,这个方法和RegisterRoutes方法一样,都是在应用程序在首次加载的时候调用的,也就是说,所有的捆绑和压缩的操作都会在应用程序加载的时候执行一次,以后会直接引用它,而当在应用程序启动后,人工干预了某个在捆绑中注册了的资源文件,MVC也只会去重新加载和压缩这一部分。
在这个RegisterBundles方法体内,可以设置BundleTable.EnableOptimizations静态属性,这个静态属性默认是设置为True的,也就是当网站在生产环境下,会对css和js等文件进行捆绑和压缩,而在开发模式下不会执行这些操作,当然你也可以通过设置为False组织它这种行为,
在方法体内,可以通过调用BundleCollection参数的Add方法增加我们要捆绑的文件:
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( "~/Scripts/bootstrap.js", "~/Scripts/respond.js"));
这里的”~/bundles/bootstrap“是一个虚拟的路径,当我们在View文件中引用的时候,实际加载的是"~/Scripts/bootstrap.js"和"~/Scripts/respond.js"两个文件,Include方法的参数为一个字符串类型的参数组,所以我们可以添加任意多个的文件,在View文件中使用如下方式进行应用:
@Scripts.Render("~/bundles/bootstrapr")
捆绑机制同时也支持CDN
var jqueryCdnPath = "http://libs.baidu.com/jquery/1.9.0/jquery.min.js"; bundles.Add(new ScriptBundle("~/bundles/jquery", jqueryCdnPath).Include( "~/Scripts/jquery-{version}.js"));
而这篇文章要说的重点是,直接使用这种捆绑和压缩的机制完成LESS的编译,虽然我们也可以使用LESSCSS在浏览器端编译less,但是并不能得到编译过的CSS文件,而很多时候我们需要得到它,判断是不是我们预想的那样。
更多关于LESS的介绍以及LESS的优势,参见这里
首先,我们需要添加dotless程序包:
之后,我在项目中Content目录下,添加一个StyleSheet1.less,代码如下:
@color:#F7F7F7;body{ background-color:@color;}
这时候,您并不需要去担心IIS会对less后缀的文件返回404,因为最终输出到客户端的是一个经过编译的CSS文件。
在BundleRegister方法中,添加如下代码:
var lessbundle = new Bundle("~/bundles/less").Include("~/Content/*.less"); lessbundle.Transforms.Add(new LessTransform()); lessbundle.Transforms.Add(new CssMinify()); bundles.Add(lessbundle);
在代码第一行,我们添加了对Content目录下所有后缀为less文件的捆绑,第二行添加了LESS的转换功能,这个功能就是由dotless提供的,第三行添加了对这一捆绑提供压缩的功能,这样我们在Production环境下,就会得到编译并且压缩的css代码;
在生产环境下,浏览器得到的源码中会找到类似以下的代码:
<link href="/bundles/less?v=vnAgv976RJi72MAy6iBw7DhQ9yxBbhXMXY0yOqNN5BU1" rel="stylesheet"/>
打开这个路径,会得到已经编译过的CSS代码:
body{background-color:#f7f7f7}
这篇文章就到这里了,最近工作的事很闹心啊,做技术人的洁癖和敏感,很他妈要命!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

使用windowshello中,找不到支持的摄像头,常见的原因是使用的摄像头不支持人脸识别、摄像头驱动安装不正确导致的,那么接下来让我们一起去看一下怎么去设置。windowshello找不到支持的摄像头教程:原因一:摄像头驱动安装不对1、一般来说Win10系统可以自动为大部分摄像头安装驱动程序,如下,插上摄像头之后会有通知;2、这时我们打开设备管理器看看,摄像头驱动是否安装好,没有的话就需要手动操作一下。WIN+X,然后选择设备管理器;3、设备管理器窗口中,展开照相机选项,会显示摄像头的驱动型号

PyCharm社区版支持的插件足够吗?需要具体代码示例随着Python语言在软件开发领域的应用越来越广泛,PyCharm作为一款专业的Python集成开发环境(IDE),备受开发者青睐。PyCharm分为专业版和社区版两个版本,其中社区版是免费提供的,但其插件支持相对专业版有所限制。那么问题来了,PyCharm社区版支持的插件足够吗?本文将通过具体的代码示例

开源软件的利与弊:了解开源项目的优劣势,需要具体代码示例在当今数字化时代,开源软件越来越受到关注和推崇。作为一种基于合作和分享精神的软件开发模式,开源软件在不同领域都有着广泛的应用。然而,尽管开源软件具有诸多优势,但也存在一些挑战和限制。本文将深入探讨开源软件的利与弊,并通过具体的代码示例展示开源项目的优劣势。一、开源软件的优势1.1开放性和透明性开源软件

华硕tufz790plus支持内存频率华硕TUFZ790-PLUS主板是一款高性能主板,支持双通道DDR4内存,最大支持64GB内存。它的内存频率非常强大,最高可达4800MHz。具体支持的内存频率包括2133MHz、2400MHz、2666MHz、2800MHz、3000MHz、3200MHz、3600MHz、3733MHz、3866MHz、4000MHz、4133MHz、4266MHz、4400MHz、4533MHz、4600MHz、4733MHz和4800MHz。无论是日常使用还是高性能需

引言在当今快速发展的数字世界中,构建健壮、灵活且可维护的WEB应用程序至关重要。PHPmvc架构提供了实现这一目标的理想解决方案。MVC(模型-视图-控制器)是一种广泛使用的设计模式,可以将应用程序的各个方面分离为独立的组件。MVC架构的基础MVC架构的核心原理是分离关注点:模型:封装应用程序的数据和业务逻辑。视图:负责呈现数据并处理用户交互。控制器:协调模型和视图之间的交互,管理用户请求和业务逻辑。PHPMVC架构phpMVC架构遵循传统MVC模式,但也引入了语言特定的功能。以下是PHPMVC

如何使用Flask-Babel实现多语言支持引言:随着互联网的不断发展,多语言支持成为了大多数网站和应用的一个必要功能。Flask-Babel是一个方便易用的Flask扩展,它提供了基于Babel库的多语言支持。本文将介绍如何使用Flask-Babel来实现多语言支持,并附上代码示例。一、安装Flask-Babel在开始之前,我们需要先安装Flask-Bab

有一些用户使用xp系统,想要将他们的显卡升级为gtx960,但不确定gtx960是否支持xp系统。实际上,gtx960是支持xp系统的。我们只需在官网下载适用于xp系统的驱动程序,就可以使用gtx960了。下面让我们一起来看看具体的步骤吧。gtx960支持xp系统吗:GTX960可以与XP系统兼容。只需要下载并安装驱动程序,你就可以开始使用了。首先,我们需要打开NVIDIA官网并导航到主页。然后,我们需要在页面上方找到一个标签或按钮,它可能会被标记为“驱动程序”。一旦找到了这个选项,我们需要点击

mvc架构(模型-视图-控制器)是PHP开发中最流行的模式之一,因为它为组织代码和简化WEB应用程序的开发提供了清晰的结构。虽然基本的MVC原理对于大多数Web应用程序来说已经足够,但对于需要处理复杂数据或实现高级功能的应用程序,它存在一些限制。分离模型层分离模型层是高级MVC架构中常见的一种技术。它涉及将模型类分解为更小的子类,每个子类专注于特定功能。例如,对于一个电子商务应用程序,您可以将主模型类分解为订单模型、产品模型和客户模型。这种分离有助于提高代码的可维护性和可重用性。使用依赖注入依赖
