上篇交待了一些理论方面的东西,并给出了另外一种解决方案的处理流程。本篇将根据该处理流程,开始代码方面的编写工作。

1,打开VS,新建ASP.NET MVC Web项目,项目类型选择空。名称为 Mcmurphy.Web(该项目为前台项目)
2,在解决方案中添加以下项目:
  1)Mcmurphy.Component(主要存放需要用到的实体类及枚举)
  2)Mcmurphy.Extension(HtmlHelper扩展类)
  3)Mcmurphy.Tests (单元测试)

3,在 Mcmurphy.Component 项目中添加文件:ResourceInfo.cs,表示我们的资源文件信息。代码如下:

namespace Mcmurphy.Component
{
/// <summary>
/// 资源信息
/// </summary>
public class ResourceInfo
{
/// <summary>
/// 链接地址
/// </summary>
public string Url { set; get; }
/// <summary>
/// 所属分组
/// </summary>
public string Group { set; get; }
/// <summary>
/// 资源优先级
/// </summary>
public PriorityType Order { set; get; }
}
}

加入资源优先级的概念,可以对文件的加载先后顺序进行更加精确的控制,而不是完全通过添加顺序进行加载。也就是说,优先级高的文件,即使添加顺序偏后,也会优先加载并渲染。这一点在随后的演示中会有所体现。

4,接下来添加优先级枚举。在Mcmurphy.Component项目中添加Enumeration文件夹,用于存在用到的枚举信息。新建PriorityType枚举类。添加资源文件时,如不指定优先级,默认为Normal。

namespace Mcmurphy.Component.Enumeration
{
/// <summary>
/// 优先级类型
/// </summary>
public enum PriorityType
{
/// <summary>
/// 最高优先级
/// </summary>
Highest = ,
/// <summary>
/// 高优先级
/// </summary>
High = ,
/// <summary>
/// 普通优先级
/// </summary>
Normal = ,
/// <summary>
/// 低优先级
/// </summary>
Low = ,
/// <summary>
/// 最低优先级
/// </summary>
Lowest =
}
}

5,为标记资源类型(样式或脚本),再定义ResourceType枚举。代码为:

namespace Mcmurphy.Component.Enumeration
{
/// <summary>
/// 资源类型
/// </summary>
public enum ResourceType
{
/// <summary>
/// 样式文件
/// </summary>
StyleSheet = ,
/// <summary>
/// 脚本文件
/// </summary>
Script =
}
}

6,接下来我们就可以扩展HtmlHelper对象,实现View中资源添加的逻辑了。在Mcmurphy.Extension项目中,新建文件CombineResourceExt.cs,修改该类为静态类,然后添加以下方法代码:

/// <summary>
/// 添加资源文件
/// </summary>
/// <param name="htmlHelper"></param>
/// <param name="resType">资源类型</param>
/// <param name="url">文件路径</param>
/// <param name="group">文件分组名称,默认为空</param>
/// <param name="order">文件同组中的优先级。默认:Normal</param>
public static void AppendResFile(this HtmlHelper htmlHelper, ResourceType resType, string url, string group = "", PriorityType order = PriorityType.Normal)
{
throw new NotImplementedException();
}

该方法扩展了HtmlHelper对象,同时指定了资源文件的地址,分组,及优先级。熟悉MVC的朋友应该知道,现在我们在View页面中,就可以这样调用,以脚本文件为例:

Html.AppendResFile(ResourceType.Script, "这里是脚本文件路径");

或者手动指定优先级:

Html.AppendResFile(ResourceType.Script, "", PriorityType.High);

关于分组的概念,可以这样理解:同属一个分组的文件,会合并其请求路径,一次性向服务器发出请求。今后我们会对其进行更加深入的说明。

为了View中更加方便的调用,我们展开Mcmurphy.Web项目,打开Views目录下的web.config文件,在<system.web.webPages.razor> 节点下,注册程序集:

<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<!--注册程序集-->
<add namespace="Mcmurphy.Component.Enumeration"/>
<add namespace="Mcmurphy.Extension"/>
</namespaces>
</pages>

这样,我们在每个View页面中,不需要再手动 @using 上面两个程序集,直接调用 Html.AppendResFile 方法即可。

接下来,鄙人将着重说明相关的路径合并规则,并依据这些合并规则完善 CombineResourceExt 类。

JS&CSS文件请求合并及压缩处理研究(二)的更多相关文章

  1. JS&CSS文件请求合并及压缩处理研究(五)

    接上篇.在我们最终调用 @Html.RenderResFile(ResourceType.Script) 或者 @Html.RenderResFile(ResourceType.StyleSheet) ...

  2. JS&CSS文件请求合并及压缩处理研究(三)

    上篇我们进行了一些代码方面的准备工作.接下来的逻辑是:在View页面解析时,通过 Html.AppendResFile 方法添加的资源文件,我们需要按照分组.优先级,文件名等条件,对其路径进行合并.具 ...

  3. JS&CSS文件请求合并及压缩处理研究(一)

    在我们日常的网站开发工作中,一个页面难免会引用到各种样式及脚本文件.了解Web开发的朋友们都知道,页面引用的每一个: <link href="style.css" rel=& ...

  4. JS&CSS文件请求合并及压缩处理研究(四)

    本篇将会尝试对之前的代码进行相关的单元测试,验证路径合并规则的覆盖率及正确性. 熟悉 ASP.NET MVC 开发的朋友应该知道,微软在MVC框架下集成了一款名为 Microsoft.VisualSt ...

  5. ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩

    JS/CSS文件的打包合并(Bundling)及压缩(Minification)是指将多个JS或CSS文件打包合并成一个文件,并在网站发布之后进行压缩,从而减少HTTP请求次数,提高网络加载速度和页面 ...

  6. 开箱即用 - Grunt合并和压缩 js,css 文件

    js,css 文件合并与压缩 Grunt 是前端自动化构建工具,类似webpack. 它究竟有多强悍,请看它的 介绍. 这里只演示如何用它的皮毛功能:文件合并与压缩. 首先说下js,css 合并与压缩 ...

  7. Web性能优化之动态合并JS/CSS文件并缓存客户端

    来源:微信公众号CodeL 在Web开发过程中,会产生很多的js/css文件,传统的引用外部文件的方式会产生多次的http请求,从而加重服务器负担且网页加载缓慢,如何在一次请求中将多个文件一次加载出来 ...

  8. 前端js,css文件合并三种方式,bat命令

    前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...

  9. 使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度

    使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度 一些泛WEB 2.0网站为了追求用户体验,可能会大量使用CSS和JS文件.这就导致在服务器带宽一定的情况下,多用户并发访问速度变慢.如何加 ...

随机推荐

  1. Apache Solr查询语法

    常用: q - 查询字符串,必须的. fl - 指定返回那些字段内容,用逗号或空格分隔多个. start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用. rows - 指定返回结果 ...

  2. Remove WebCakeDesktop

    WebCakeDesktop.Updater.exe 是广告程序,卸载步骤参考 http://malwaretips.com/blogs/webcake-desktop-updater-exe-rem ...

  3. Scala 深入浅出实战经典 第42讲:scala 泛型类,泛型函数,泛型在spark中的广泛应用

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  4. python 字符编码问题

    原因 近期,用Python处理一些中文的字符串,但是用Python读取文件的中文字符和在代码中输入的中文字符,在判断处理时,例如判断“相等”或者“包含”,总是不能判断,相等或者包含都不起作用.看了字符 ...

  5. [转]Linux下的lds链接脚本详解

    转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml     一. 概论 每一个链接过程都由链接脚本(lin ...

  6. Unity中Mesh分解与边缘高亮加上深度检测

    一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...

  7. Android adt v22.6.2 自动创建 appcompat_v7 解决方法,最低版本2.2也不会出现

    Android 开发工具升级到22.6.2在创建工程时只要选择的最低版本低于4.0,就会自动生成一个项目appcompat_v7,没创建一个新的项目都会自动创建,很是烦恼... 之前在网上也找过方法, ...

  8. PLSQL登录弹出空白框如何解决

     转自:http://jingyan.baidu.com/article/066074d6760959c3c21cb0d6.html   出现登录弹出空白框这是由于win7的安全性提高了,在PLSQL ...

  9. 入手Cubieboard2之制作最小Linux系统

    前言 昨天终于入手了一块Cubieboard2板子,今年4月入职从事的就是与之相关的工作,因此趁现在有时间就好好熟悉一下. 一.主机环境 1.PC主机WIN 7旗舰版 1.虚拟机VM7.0 2.ubu ...

  10. 为Eclipse添加Java和Android SDK源代码

    1.添加jdk源码进入eclipse Ctrl + Click -->Attached Source 路径:D:\Program Files\Java\jdk1.8.0_45\src.zip 2 ...