Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS

在开发中编写的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

 

// 文件内容
string strContent = File.ReadAllText(jsPath, Encoding.UTF8);
 
// 初始化
var js =  new JavaScriptCompressor(strContent,  false, Encoding.UTF8, System.Globalization.CultureInfo.CurrentCulture);
 
// 压缩该js
strContent = js.Compress();
File.WriteAllText(jsPath, strContent, Encoding.UTF8);

 


压缩css

string strContent = File.ReadAllText(cssPath, Encoding.UTF8)

// 进行压缩
strContent = CssCompressor.Compress
(strContent);

File.WriteAllText(cssPath, strContent, Encoding.UTF8);

 

 

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

<? xml version="1.0" encoding="utf-8"  ?>

< Project  xmlns ="http://schemas.microsoft.com/developer/MsBuild/2003" >
   < UsingTask
  
TaskName ="CompressorTask"
  AssemblyFile
="Yahoo.Yui.Compressor.dll"   />
   <!--  The .NET 2.0 version of the task .. and yes .. that's Model.Net20 folder listed twice .. i know i know...
<UsingTask
TaskName="CompressorTask"
        AssemblyFile="..\..\Projects\Yahoo.Yui.Compressor\Model.Net20\Model.Net20\bin\Debug\Yahoo.Yui.Compressor.NET20.dll" />
    
-->

   <!--  Define the output locations. These can be set via the msbuild command line using
         /p:CssOutputFile=$(TargetDir)../whatever...
         /p:JavaScriptOutputFile=$(TargetDir)../whatever...
 
         If they are not supplied or are empty, then we the value whatever is supplied, below.
    
-->
   < PropertyGroup >
     < CssOutputFile  Condition =" '$(CssOutputFile)'=='' " >
      SylesSheetFinal.css
     </ CssOutputFile >
     < JavaScriptOutputFile  Condition =" '$(JavaScriptOutputFile)'=='' " >
      JavaScriptFinal.css
     </ JavaScriptOutputFile >
   </ PropertyGroup >


   < Target  Name ="MyTaskTarget" >
     <!--
ItemGroup\CssFiles or ItemGroup\JavaScriptFiles: add zero to many files you wish to include in this compression task.
                                                             Don't forget, you can use the wildcard (eg. *.css, *.js) if you feel up to it.
                                                             Finally, at least one item is required - either a css file or a js file.
 
CssFiles/JavaScriptFiles data format: Please do not touch this.
DeleteCssFiles: [Optional] True | Yes | Yeah | Yep | True | FoSho | FoSho. Default is False. Anything else is False. (eg. blah = false, xxxx111 = false, etc)
CssCompressionType: YuiStockCompression | MichaelAshsRegexEnhancements | HaveMyCakeAndEatIt or BestOfBothWorlds or Hybrid; Default is YuiStockCompression.
ObfuscateJavaScript: [Optional] refer to DeleteCssFiles, above.
PreserveAllSemicolons: [Optional] refer to DeleteCssFiles, above.
DisableOptimizations: [Optional] refer to DeleteCssFiles, above.
EncodingType: [Optional] ASCII, BigEndianUnicode, Unicode, UTF32, UTF7, UTF8, Default. Default is 'Default'.
DeleteJavaScriptFiles: [Optional] refer to DeleteCssFiles, above.
LineBreakPosition: [Optional] the position where a line feed is appened when the next semicolon is reached. Default is -1 (never add a line break).
                               0 (zero) means add a line break after every semicolon. (This might help with debugging troublesome files).         
LoggingType: None | ALittleBit | HardcoreBringItOn;  Hardcore also lists javascript verbose warnings, if there are any (and there usually is :P ).
ThreadCulture: [Optional] the culture you want the thread to run under. Default is 'en-gb'.
IsEvalIgnored: [Optional] compress any functions that contain 'eval'. Default is False, which means a function that contains
                           'eval' will NOT be compressed. It's deemed risky to compress a function containing 'eval'. That said,
if the usages are deemed safe this check can be disabled by setting this value to True.
        
-->
     < ItemGroup >
       <!--  Single files, listed in order of dependency 
      <CssFiles Include="../StylesheetSample1.css"/>
      <CssFiles Include="../StylesheetSample2.css"/>
      <CssFiles Include="../StylesheetSample3.css"/>
      <CssFiles Include="../StylesheetSample4.css"/>
-->

       < JavaScriptFiles  Include ="../myjs/sample_1.js" />

       <!--  All the files. They will be handled (I assume) in alphabetically.  -->
       <!-- <CssFiles Include="*.css" />
<JavaScriptFiles Include="*.js" />
            
-->
     </ ItemGroup >

     < CompressorTask
    
CssFiles ="@(CssFiles)"
    DeleteCssFiles
="false"
    CssOutputFile
="$(CssOutputFile)"
    CssCompressionType
="YuiStockCompression"
    JavaScriptFiles
="@(JavaScriptFiles)"
    ObfuscateJavaScript
="False"
    PreserveAllSemicolons
="False"
    DisableOptimizations
="Nope"
    EncodingType
="utf-8"             
    DeleteJavaScriptFiles
="false"
    LineBreakPosition
="-1"
    JavaScriptOutputFile
="$(JavaScriptOutputFile)"
    LoggingType
="ALittleBit"
    ThreadCulture
="en-au"
    IsEvalIgnored
="false"
    
/>
    
     <!--
    
    CssFiles="@(CssFiles)"
    DeleteCssFiles="false"
    CssOutputFile="$(CssOutputFile)"
    CssCompressionType="YuiStockCompression"
    JavaScriptFiles="@(JavaScriptFiles)"
    ObfuscateJavaScript="False"                   //是否模糊处理js文件,True:会将js中的变量为“a,b,c”单个字符的变量
    PreserveAllSemicolons="False"
    DisableOptimizations="Nope"
    EncodingType="utf-8"                          //如果js或者css包含有中文,则必须使用utf-8编码,否则会乱码
    DeleteJavaScriptFiles="false"
    LineBreakPosition="-1"
    JavaScriptOutputFile="$(JavaScriptOutputFile)"
    LoggingType="ALittleBit"
    ThreadCulture="en-au"
    IsEvalIgnored="false"
    
    
-->

   </ Target >
</ 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

 

转载于:https://www.cnblogs.com/timy/archive/2011/10/30/2229640.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着Web前端开发的不断发展,我们经常需要使用JSCSS来实现网页的动态交互和样式美化。但是,这些文件的体积较为庞大,会影响网页的加载速度和用户的体验。因此,在进行Web前端开发时,将JSCSS文件进行压缩是一项非常重要的工作。而JSCSS批量压缩工具则是为了更加高效地完成这项工作而创建的。 JSCSS批量压缩工具能够自动化执行压缩任务,减少人工操作的时间和难度。一些常见的JSCSS批量压缩工具包括:UglifyJSCSSMinifier、YUI Compressor等。这些工具大多具有以下几个特点: 1. 节省时间和精力:JSCSS批量压缩工具支持批量处理,能够同时处理多个文件,在短时间内完成压缩任务,大大节省了开发者的时间和精力。此外,使用这些工具还能避免手动操作出现的错误,保证压缩的准确性。 2. 减小文件体积:通过删除空格、注释、多余的标点符号等方式,JSCSS批量压缩工具能够将文件的体积减小到最小。这样不仅能够提高网页的加载速度,还能减少服务器端的带宽压力。 3. 支持多种压缩方式:JSCSS批量压缩工具支持多种压缩算法,如GZip、Deflate等,能够根据不同的情况选择最合适的压缩方式。这样能够使压缩后的文件更加紧凑、快速,减少传输时间。 总之,JSCSS批量压缩工具在Web前端开发中发挥着非常重要的作用,能够有效地减小文件体积,提高网页的性能和用户体验,对于开发人员而言是一个非常实用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值