一、压缩
网上有很多关于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
压缩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
解压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
以下变量请根据实际情况修改
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
在页面中,我们可以这样子用:
@Html.Raw("comm.css".ToCss()) @Html.Raw("jquery-3.0.0.min.js".ToJs())
是否调用ToCss()或者ToJs(),大家需要根据实际见仁见智哈哈。