zoukankan      html  css  js  c++  java
  • web性能优化之压缩与缓存js、css文件

    一、压缩

    网上有很多关于js、css文件压缩的介绍。我也来凑凑热闹,嘻嘻。

    我使用的是Microsoft Ajax Minifier、以及批处理命令。

    首先,在本机安装Microsoft Ajax Minifier。双击AjaxMinSetup.msi,傻瓜式安装。
    然后,建立bat文件。

    压缩JS.bat

     1 @echo off
     2 
     3 rem 定义变量
     4 rem AjaxMinSetup.msi安装磁盘
     5 set disk_path=D:
     6 rem AjaxMinSetup.msi安装路径
     7 set ajaxMinifierExe_path=D:\Program Files (x86)\Microsoft\Microsoft Ajax Minifier\
     8 rem 源文件目录
     9 set source_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\js
    10 rem 压缩文件目录
    11 set min_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\jsMin
    12 rem 修改日期
    13 set edit_date=20170801
    14 rem 文件类型
    15 set suffix=js
    16 
    17 rem ----------------------------------------------------------------------------------------------------
    18 
    19 rem 复制文件,从source_path中复制修改日期大于或等于edit_date的文件到min_path中
    20 rem /XX 排除多余的文件和目录。
    21 rem /MAXAGE:n 最长的文件存在时间 - 排除早于 n 天/日期的文件。
    22 rem /S 复制子目录,但不复制空的子目录。
    23 robocopy  /XX /MAXAGE:%edit_date% /S %source_path% %min_path%
    24 
    25 rem ----------------------------------------------------------------------------------------------------
    26 
    27 rem 压缩文件
    28 rem 切换磁盘
    29 %disk_path%
    30 rem 切换目录
    31 cd %ajaxMinifierExe_path%
    32 rem 遍历min_path所有suffix类型文件,压缩并覆盖该文件
    33 rem for /R "%min_path%" %%s in (*.%suffix%) do (ajaxmin "%%s" –out "%%s")
    34 rem 高压缩方式(暂时不确定跟前面一行的区别哈哈)
    35 for /R "%min_path%" %%s in (*.%suffix%) do (ajaxmin -a -h "%%s" -o "%%s")
    36 
    37 pause
    View Code

    压缩CSS.bat

     1 @echo off
     2 
     3 rem 定义变量
     4 rem AjaxMinSetup.msi安装磁盘
     5 set disk_path=D:
     6 rem AjaxMinSetup.msi安装路径
     7 set ajaxMinifierExe_path=D:\Program Files (x86)\Microsoft\Microsoft Ajax Minifier\
     8 rem 源文件目录
     9 set source_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\css
    10 rem 压缩文件目录
    11 set min_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\cssMin
    12 rem 修改日期
    13 set edit_date=20170801
    14 rem 文件类型
    15 set suffix=css
    16 
    17 rem ----------------------------------------------------------------------------------------------------
    18 
    19 rem 复制文件,从source_path中复制修改日期大于或等于edit_date的文件到min_path中
    20 rem /XX 排除多余的文件和目录。
    21 rem /MAXAGE:n 最长的文件存在时间 - 排除早于 n 天/日期的文件。
    22 rem /S 复制子目录,但不复制空的子目录。
    23 robocopy  /XX /MAXAGE:%edit_date% /S %source_path% %min_path%
    24 
    25 rem ----------------------------------------------------------------------------------------------------
    26 
    27 rem 压缩文件
    28 rem 切换磁盘
    29 %disk_path%
    30 rem 切换目录
    31 cd %ajaxMinifierExe_path%
    32 rem 遍历min_path所有suffix类型文件,压缩并覆盖该文件
    33 rem for /R "%min_path%" %%s in (*.%suffix%) do (ajaxmin "%%s" –out "%%s")
    34 rem 高压缩方式(暂时不确定跟前面一行的区别哈哈)
    35 for /R "%min_path%" %%s in (*.%suffix%) do (ajaxmin -a -h "%%s" -o "%%s")
    36 
    37 pause
    View Code

    解压JS.bat

     1 @echo off
     2 
     3 rem 定义变量
     4 rem AjaxMinSetup.msi安装磁盘
     5 set disk_path=D:
     6 rem AjaxMinSetup.msi安装路径
     7 set ajaxMinifierExe_path=D:\Program Files (x86)\Microsoft\Microsoft Ajax Minifier\
     8 rem 压缩文件目录
     9 set min_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\jsMin
    10 rem 文件类型
    11 set suffix=js
    12 
    13 rem ----------------------------------------------------------------------------------------------------
    14 
    15 rem 切换磁盘
    16 %disk_path%
    17 rem 切换目录
    18 cd %ajaxMinifierExe_path%
    19 rem 遍历min_path所有suffix类型文件,解压并覆盖该文件
    20 for /R "%min_path%" %%s in (*.%suffix%) do (ajaxmin -pretty "%%s" -clobber -o "%%s")
    21 
    22 pause
    View Code

    以下变量请根据实际情况修改

    rem AjaxMinSetup.msi安装磁盘
    set disk_path=D:
    rem AjaxMinSetup.msi安装路径
    set ajaxMinifierExe_path=D:\Program Files (x86)\Microsoft\Microsoft Ajax Minifier\
    rem 源文件目录
    set source_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\js
    rem 压缩文件目录
    set min_path=C:\Users\ucs_maiaimei\Desktop\ajaxmin压缩JS或CSS\test\jsMin
    rem 修改日期
    set edit_date=20170801


    二、缓存

    当用户访问某个页面时,浏览器会在用户磁盘上对所请求的静态文件进行存储,
    当用户再次请求这个页面时,浏览器就可以从本地磁盘读取文件,
    这样就可以节约网络资源、加速页面的渲染,提高用户体验。

    任何事情都有两面性,浏览器缓存有利也有弊。
    大多数网站的js、css文件,并不是一成不变的,如果服务器修改了某个文件,而客户端还是使用缓存中的旧文件,那页面就有可能报脚本错误...

    如何防止浏览器缓存?我们一般是加版本号。如下:

    <link type="text/css" rel="stylesheet" href="/css/comm.css?v=1.0.5" />
    <script type="text/javascript" src="/js/jquery-3.0.0.min.js?v=1.0.5"></script>

    一个页面,往往引用一个或以上的js、css文件,这时候,上面两行代码就会被复制粘贴若干次。
    作为一名搬砖的,也是有追求的。

    <link type="text/css" rel="stylesheet" href="某css文件相对路径" />
    <script type="text/javascript" src="某js文件相对路径"></script>

    除了路径外,其他都是固定字符,我们可以来做下封装。

     1 /// <summary>
     2         /// js文件根目录
     3         /// </summary>
     4         private static string jsDir = (ConfigurationManager.AppSettings["JsDir"] ?? "JsDir").ToString();
     5 
     6         /// <summary>
     7         /// css文件根目录
     8         /// </summary>
     9         private static string cssDir = (ConfigurationManager.AppSettings["CssDir"] ?? "CssDir").ToString();
    10 
    11         /// <summary>
    12         /// 文件版本号
    13         /// </summary>
    14         private static string fileVersion = (ConfigurationManager.AppSettings["FileVersion"] ?? "1.0.1").ToString();
    15 
    16         #region 链接外部CSS文件
    17 
    18         /// <summary>
    19         /// 链接外部CSS文件
    20         /// </summary>
    21         /// <param name="file">单个css文件相对路径,包括.css后缀但不包括css文件根目录</param>
    22         /// <returns></returns>
    23         public static string ToCss(this string file)
    24         {
    25             return string.Format("<link type=\"text/css\" rel=\"stylesheet\" href=\"/{0}/{1}?v={2}\" />", cssDir, file, fileVersion);
    26         }
    27 
    28         #endregion
    29 
    30         #region 链接外部JS文件
    31 
    32         /// <summary>
    33         /// 链接外部JS文件
    34         /// </summary>
    35         /// <param name="file">单个js文件相对路径,包括.js后缀但不包括js文件根目录</param>
    36         /// <returns></returns>
    37         public static string ToJs(this string file)
    38         {
    39             return string.Format("<script type=\"text/javascript\" src=\"/{0}/{1}?v={2}\"></script>", jsDir, file, fileVersion);
    40         }
    41 
    42         #endregion
    View Code

    在页面中,我们可以这样子用:

    @Html.Raw("comm.css".ToCss())
    @Html.Raw("jquery-3.0.0.min.js".ToJs())

    是否调用ToCss()或者ToJs(),大家需要根据实际见仁见智哈哈。

  • 相关阅读:
    [转]男人25岁之前应该懂得的21个道理
    family album U.S.A 05
    Humour
    Pretty Boy
    [转]男人本色.女人风韵
    电话英语
    搞不懂的女人
    family album U.S.A 03
    [转]The flame of love(爱的火焰)
    四季花开!
  • 原文地址:https://www.cnblogs.com/maiaimei/p/7275300.html
Copyright © 2011-2022 走看看