在开发中编写的js、css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担。这就得每次发版本的时候,对js、js进行压缩,然后再发布。有没有什么办法,让代码到了服务器上边,它自己进行压缩呢?

有两种办法:

第一种,在css、js请求到来的时候读取一下相对应的文件,进行压缩后返回。此方法可以通过在Global.asax的Application_BeginRequest的事件中,进行处理,也可以在web.config中注册一个httpHandler进行处理。

第二种是在程序启动的时候,对全部css以及js进行压缩,压缩之后,每次访问都使用压缩后的文件即可。这种办法可以将js全部压缩到一个文件夹里边,不过需要注意一下文件的顺序。

压缩使用的是雅虎的压缩组件: Yahoo.Yui.Compressor.dll

由于第一种办法没能实现js压缩到一个文件,所以这里采用的是第二种方案。

压缩方法比较简单,首先引用Yahoo.Yui.Compressor.dll和EcmaScript.NET.modified.dll

压缩js

  1. //文件内容
  2.  
  3. string strContent = File.ReadAllText(jsPath, Encoding.UTF8);
  4.  
  5. //初始化
  6.  
  7. var js = new JavaScriptCompressor(strContent, false, Encoding.UTF8, System.Globalization.CultureInfo.CurrentCulture);
  8.  
  9. //压缩该js
  10.  
  11. strContent = js.Compress();
  12.  
  13. File.WriteAllText(jsPath, strContent, Encoding.UTF8);

压缩css

  1. string strContent = File.ReadAllText(cssPath, Encoding.UTF8)
  2.  
  3. //进行压缩
  4.  
  5. strContent = CssCompressor.Compress
  6.  
  7. (strContent);
  8.  
  9. File.WriteAllText(cssPath, strContent, Encoding.UTF8);

还有另外一一种办法不用自己写代码,每次网站发布的时候自动压缩指定的js和css文件:
1)在项目中新建“MSBuild” 文件夹,把yahoo压缩组件的两个dll放进去
2)在“文件夹”内新建"MSBuildCompressor.xml"文件:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2.  
  3. <Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
  4.  
  5. <UsingTask
  6.  
  7. TaskName="CompressorTask"
  8.  
  9. AssemblyFile="Yahoo.Yui.Compressor.dll" />
  10.  
  11. <!-- The .NET 2.0 version of the task .. and yes .. that's Model.Net20 folder listed twice .. i know i know...
  12.  
  13. <UsingTask
  14.  
  15. TaskName="CompressorTask"
  16.  
  17. AssemblyFile="..\..\Projects\Yahoo.Yui.Compressor\Model.Net20\Model.Net20\bin\Debug\Yahoo.Yui.Compressor.NET20.dll" />
  18.  
  19. -->
  20.  
  21. <!-- Define the output locations. These can be set via the msbuild command line using
  22.  
  23. /p:CssOutputFile=$(TargetDir)../whatever...
  24.  
  25. /p:JavaScriptOutputFile=$(TargetDir)../whatever...
  26.  
  27. If they are not supplied or are empty, then we the value whatever is supplied, below.
  28.  
  29. -->
  30.  
  31. <PropertyGroup>
  32.  
  33. <CssOutputFile Condition=" '$(CssOutputFile)'=='' ">
  34.  
  35. SylesSheetFinal.css
  36.  
  37. </CssOutputFile>
  38.  
  39. <JavaScriptOutputFile Condition=" '$(JavaScriptOutputFile)'=='' ">
  40.  
  41. JavaScriptFinal.css
  42.  
  43. </JavaScriptOutputFile>
  44.  
  45. </PropertyGroup>
  46.  
  47. <Target Name="MyTaskTarget">
  48.  
  49. <!--
  50.  
  51. ItemGroup\CssFiles or ItemGroup\JavaScriptFiles: add zero to many files you wish to include in this compression task.
  52.  
  53. Don't forget, you can use the wildcard (eg. *.css, *.js) if you feel up to it.
  54.  
  55. Finally, at least one item is required - either a css file or a js file.
  56.  
  57. CssFiles/JavaScriptFiles data format: Please do not touch this.
  58.  
  59. DeleteCssFiles: [Optional] True | Yes | Yeah | Yep | True | FoSho | FoSho. Default is False. Anything else is False. (eg. blah = false, xxxx111 = false, etc)
  60.  
  61. CssCompressionType: YuiStockCompression | MichaelAshsRegexEnhancements | HaveMyCakeAndEatIt or BestOfBothWorlds or Hybrid; Default is YuiStockCompression.
  62.  
  63. ObfuscateJavaScript: [Optional] refer to DeleteCssFiles, above.
  64.  
  65. PreserveAllSemicolons: [Optional] refer to DeleteCssFiles, above.
  66.  
  67. DisableOptimizations: [Optional] refer to DeleteCssFiles, above.
  68.  
  69. EncodingType: [Optional] ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8, Default. Default is 'Default'.
  70.  
  71. DeleteJavaScriptFiles: [Optional] refer to DeleteCssFiles, above.
  72.  
  73. LineBreakPosition: [Optional] the position where a line feed is appened when the next semicolon is reached. Default is -1 (never add a line break).
  74. (zero) means add a line break after every semicolon. (This might help with debugging troublesome files).
  75.  
  76. LoggingType: None | ALittleBit | HardcoreBringItOn; Hardcore also lists javascript verbose warnings, if there are any (and there usually is :P ).
  77.  
  78. ThreadCulture: [Optional] the culture you want the thread to run under. Default is 'en-gb'.
  79.  
  80. IsEvalIgnored: [Optional] compress any functions that contain 'eval'. Default is False, which means a function that contains
  81.  
  82. 'eval' will NOT be compressed. It's deemed risky to compress a function containing 'eval'. That said,
  83.  
  84. if the usages are deemed safe this check can be disabled by setting this value to True.
  85.  
  86. -->
  87.  
  88. <ItemGroup>
  89.  
  90. <!-- Single files, listed in order of dependency
  91.  
  92. <CssFiles Include="../StylesheetSample1.css"/>
  93.  
  94. <CssFiles Include="../StylesheetSample2.css"/>
  95.  
  96. <CssFiles Include="../StylesheetSample3.css"/>
  97.  
  98. <CssFiles Include="../StylesheetSample4.css"/>-->
  99.  
  100. <JavaScriptFiles Include="../myjs/sample_1.js"/>
  101.  
  102. <!-- All the files. They will be handled (I assume) in alphabetically. -->
  103.  
  104. <!--<CssFiles Include="*.css" />
  105.  
  106. <JavaScriptFiles Include="*.js" />
  107.  
  108. -->
  109.  
  110. </ItemGroup>
  111.  
  112. <CompressorTask
  113.  
  114. CssFiles="@(CssFiles)"
  115.  
  116. DeleteCssFiles="false"
  117.  
  118. CssOutputFile="$(CssOutputFile)"
  119.  
  120. CssCompressionType="YuiStockCompression"
  121.  
  122. JavaScriptFiles="@(JavaScriptFiles)"
  123.  
  124. ObfuscateJavaScript="False"
  125.  
  126. PreserveAllSemicolons="False"
  127.  
  128. DisableOptimizations="Nope"
  129.  
  130. EncodingType="utf-8"
  131.  
  132. DeleteJavaScriptFiles="false"
  133.  
  134. LineBreakPosition="-1"
  135.  
  136. JavaScriptOutputFile="$(JavaScriptOutputFile)"
  137.  
  138. LoggingType="ALittleBit"
  139.  
  140. ThreadCulture="en-au"
  141.  
  142. IsEvalIgnored="false"
  143.  
  144. />
  145.  
  146. <!--
  147.  
  148. CssFiles="@(CssFiles)"
  149.  
  150. DeleteCssFiles="false"
  151.  
  152. CssOutputFile="$(CssOutputFile)"
  153.  
  154. CssCompressionType="YuiStockCompression"
  155.  
  156. JavaScriptFiles="@(JavaScriptFiles)"
  157.  
  158. ObfuscateJavaScript="False" //是否模糊处理js文件,True:会将js中的变量为“a,b,c”单个字符的变量
  159.  
  160. PreserveAllSemicolons="False"
  161.  
  162. DisableOptimizations="Nope"
  163.  
  164. EncodingType="utf-8" //如果js或者css包含有中文,则必须使用utf-8编码,否则会乱码
  165.  
  166. DeleteJavaScriptFiles="false"
  167.  
  168. LineBreakPosition="-1"
  169.  
  170. JavaScriptOutputFile="$(JavaScriptOutputFile)"
  171.  
  172. LoggingType="ALittleBit"
  173.  
  174. ThreadCulture="en-au"
  175.  
  176. IsEvalIgnored="false"
  177.  
  178. -->
  179.  
  180. </Target>
  181.  
  182. </Project>

3)选择网站属性,切换到“生成事件”标签,,在“”输入以下命令:
$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)MSBuild\MSBuildCompressor.xml" /p:CssOutputFile="../miniFile/Sieena.min.css" /p:JavaScriptOutputFile="../miniFile/Sieena.min.js"

这样,每次编译网站的时候就会自动压缩指定的js和css文件了

实例下载

官方地址:

http://yuicompressor.codeplex.com/wikipage?title=Sample%20MSBuild.xml%20File&ProjectName=yuicompressor

【转载】Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS的更多相关文章

  1. Google Pagespeed,自动压缩优化JS/CSS/Image

    Google Pagespeed,自动压缩优化JS/CSS/Image 浏览: 发布日期:// 分类:技术分享 关键字: Nginx Appache Pagespeed 自动压缩优化JS/CSS/Im ...

  2. 给YUI Compressor添加右键命令,完成快捷压缩

    YUI Compressor默认不带右键安装功能 YUI Compressor非常好用,特别是JS的混淆是众多JS Coding的最爱.可惜官网提供的版本都不具备右键功能,每次压缩都要cmd输入一些命 ...

  3. JAVA使用YUI压缩CSS/JS

    前言 JS/CSS文件压缩我们经常会用到,可以在网上找在线压缩或者本地直接使用,我这里使用的是yahoo开源组件YUI Compressor.首先介绍一下YUI Compressor,它是一个用来压缩 ...

  4. 使用VS Code开发纸壳CMS自动编译主题压缩CSS,JS

    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段.代码对比 Diff.GI ...

  5. asp.net mvc自动压缩文件,并生成CDN引用

    很多站点都是用了静态文件分离.我推荐一种处理静态文件分离的方式. BundleExtensions.cs public static class BundleExtensions { public s ...

  6. ASP.NET RAZOR自动生成的js Timer

    <input type="hidden" value="@(Model.TimeLength)" id="examTimeLength" ...

  7. ASP.NET 4.0 Webform Bundles 压缩css, js,为什么放到服务器不行

    参考文章: http://blog.csdn.net/dyllove98/article/details/8758149 文章说的很详细. 但是本地是可以完美展示(我的本地环境有4.0 也有4.5) ...

  8. asp.net mvc项目实记-开启伪静态-Bundle压缩css,js

    百度这些东西,还是会浪费了一些不必要的时间,记录记录以备后续 一.开启伪静态 如果不在web.config中配置管道开关则伪静态无效 首先在RouteConfig.cs中中注册路由 routes.Ma ...

  9. iwebshop 自动给css js链接加版本信息

    lib/core/tag_class.php case 'theme:': $path = $matches[4]; $exts = strtolower(substr($matches[4], st ...

随机推荐

  1. java web 过滤器跟拦截器的区别和使用

    注:文章整理自知乎大牛以及百度网友(电脑网络分类达人 吕明),特此感谢! 一.过滤器 1.什么是过滤器? 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上.过滤器可附加到一个 ...

  2. system.web下的HttpModules节点和system.webServer下的modules节点的配置区别

    [转]自定义HttpModule的一些经验--配置篇 自定义web模块,需继承System.Web.IHttpModule接口 一:拦截对该服务器所有的http请求. 第一步:将自定义module类使 ...

  3. mybatis 参数为String,用_parameter 取值

    mybatis 参数为String,if test读取该参数代码: <select id="getMaxDepartId" parameterType="java. ...

  4. 64位系统web项目导出excel问题分析及解决方法汇总

    最近在web项目中做了一个导出Excel功能.在导出的时候报错:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败. 一 ...

  5. VCL 中的 Windows API 函数(1): AbortDoc

    AbortDoc: 该函数终止当前打印作业并删除最好一次调用 StartDoc 函数写入的所有信息. 该函数在 Printers 单元的应用:AbortDoc(Canvas.Handle);

  6. mysql中查看某个日期是星期几?如何知道某个日期是星期几?某个日期是周几?

    需求描述: mysql中,如果要查看某个日期是星期几,可以用date_format函数实现,在此记录下. 操作过程: 1.通过date_format函数查看某个日期是星期几 mysql> sel ...

  7. kendo-ui表单验证

    摘要: 表单验证是每一个项目必不可少的,他能够帮助我们过滤不正确的用户输入,保证系统数据正确.例如下面这样: kendo-ui也有自己的表单验证方法,下面就分享下kendo-ui的表单验证方式. 基本 ...

  8. oracle 按照时间间隔进行分组

    select sum(SHOW_NUMBER) as SHOW_NUMBER ,d.dt from T_RECOMMEND_ANALYSIS t,( ) dt ) d group by d.dt 按照 ...

  9. [scala] scala 集合(⑧)

    1.List 基础操作 2.Set 基础操作 3. TreeSet 排序Set 4. 拉链操作 5. 流 import scala.collection.immutable.TreeSet impor ...

  10. [Scikit-learn] 1.1 Generalized Linear Models - Lasso Regression

    Ref: http://blog.csdn.net/daunxx/article/details/51596877 Ref: https://www.youtube.com/watch?v=ipb2M ...