java+python+YuiCompressor实现多css js的合并与压缩
来源:互联网 发布:网络挂号:厦门长庚医院 编辑:程序博客网 时间:2024/05/16 18:35
最近网站进行整体升级,有一部分需要放到DNS上,对于原有的css和js进行整合,提高访问速度(可能前辈都知道,js和css多了的话会增加网站或者app的请求数量,这样会降低网站的访问速度,最简单的办法就是合并多个js和css文件)。
我js和css文件有很多,手动合并的话不是被累死,就是被累死,或者被累死。反正我是个懒人,就用程序吧。上网看了一下,YuiCompressor比较不错,所以下载了它的jar包,网络上很多,我就不贴了。
我的压缩步骤总共分为两步:1.压缩所有js和css文件。2.合并所有js/css文件
java充当了js的压缩角色,代码如下:
package JavaCompressor;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.Reader;import java.io.Writer;import org.mozilla.javascript.ErrorReporter;import org.mozilla.javascript.EvaluatorException;import com.yahoo.platform.yui.compressor.CssCompressor;import com.yahoo.platform.yui.compressor.JavaScriptCompressor;public class TestJsZip {// 要处理的目录 staticFile dir = new File("W:\\YuiCompressor\\yuicompressor-2.4.7\\build");static int linebreakpos = -1;staticboolean munge = true;staticboolean verbose = false;staticboolean preserveAllSemiColons = false;staticboolean disableOptimizations = false;public static void main(String [] args){try {checkFile(dir);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void checkFile(File file) throws Exception {if (file.getName().endsWith(".svn"))return;if (file.isFile()) {jsZip(file);return;}File[] files = file.listFiles();if (files == null || files.length == 0)return;for (File f : files) {if (file.getName().endsWith(".svn"))return;if (file.isFile()) {jsZip(file);continue;}checkFile(f);}}public static void jsZip(File file) throws Exception {String fileName = file.getName();System.out.println(fileName);if (fileName.endsWith(".js") == false && fileName.endsWith(".css") == false) {return;}Reader in = new FileReader(file);String filePath = file.getAbsolutePath();File tempFile = new File(filePath + ".tempFile");Writer out = new FileWriter(tempFile);if (fileName.endsWith(".js")) {JavaScriptCompressor jscompressor = new JavaScriptCompressor(in, new ErrorReporter() {public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) {if (line < 0) {System.err.println("\n[WARNING] " + message);} else {System.err.println("\n[WARNING] " + line + ':' + lineOffset + ':' + message);}}public void error(String message, String sourceName, int line, String lineSource, int lineOffset) {if (line < 0) {System.err.println("\n[ERROR] " + message);} else {System.err.println("\n[ERROR] " + line + ':' + lineOffset + ':' + message);}}public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource,int lineOffset) {error(message, sourceName, line, lineSource, lineOffset);return new EvaluatorException(message);}});jscompressor.compress(out, linebreakpos, munge, verbose, preserveAllSemiColons, disableOptimizations);} else if (fileName.endsWith(".css")) {CssCompressor csscompressor = new CssCompressor(in);csscompressor.compress(out, linebreakpos);}out.close();in.close();file.delete();tempFile.renameTo(file);tempFile.delete();}}这样执行完后,所有文件都已经被压缩,然后我用python执行合并操作(这里提醒一下,合并操作同样可以java来执行,而且很简单,不过个人对python一直情有独钟,所以用python来执行),代码如下:
# coding:utf-8'''Created on 2016年1月12日@author: 马慧超'''# C:\MOON\TSTWorkSpace\YuiCompressor\WebContent\JSimport osimport reurl = "W:\\YuiCompressor\\yuicompressor-2.4.7\\build"def read_entirely(file): result = "" with open(file, 'r') as handle: for line in handle: result += line return resultdef combinor(dir): resultJS = "" resultCSS = "" for root, dirs, files in os.walk(dir): for file in files: m = re.match('.*\.js', file) n = re.match('.*\.css', file) if m: resultJS += read_entirely(os.path.join(url, file)) + '\n' if n: resultCSS += read_entirely(os.path.join(url, file)) + '\n' open("core.js", 'w').write(resultJS) open("core.css", 'w').write(resultCSS)combinor(url)这样所有的js都被合并到core.js 中了,所有的css都被合并到core.css中了。
【注】:可能有些有心人已经发现了,虽然这种办法实现了压缩和合并,但是会出现一种问题,就是变量重名冲突问题。这个确实是一个大问题,我之前想过用正则表达式找出,但是找出来后并不能确定两者是否在同一命名空间(作用域)下冲突,纠结ing,有经验的朋友可以给我留言分享分享心得。
1 0
- java+python+YuiCompressor实现多css js的合并与压缩
- 使用yuicompressor-maven-plugin合并压缩js和css
- 使用yuicompressor 压缩js, CSS
- 使用yuicompressor 压缩js, CSS
- yuicompressor 与 maven结合,打包,压缩js,css
- yuicompressor 与 maven结合,打包,压缩js,css
- Vim 中调用 YUICompressor 压缩 js, css
- ant和yuicompressor 压缩css、js方案
- YUIcompressor批处理压缩js和css
- 性能优化之YUICompressor压缩JS、CSS
- yuiCompressor linux批量压缩js、css
- win7下,Ant 配合yuicompressor对js和css进行合并、压缩、拷贝处理
- java环境 + yuicompressor 实现代码压缩优化
- yuicompressor+ant 混淆压缩多个js和css文件方法
- 安装及使用YUICompressor(压缩JS,CSS文件)4
- 使用yuicompressor.jar对js/css文件代码压缩
- Maven使用yuicompressor-maven-plugin打包压缩css、js文件
- 使用yuicompressor-maven-plugin压缩js及css文件
- 并行原理分析(libcurl+epoll)
- 阅读《Android 从入门到精通》(10)——单项选择
- 全球化视野与创新
- 网管人员必备的命令
- [提醒]曾经犯的谜之错误
- java+python+YuiCompressor实现多css js的合并与压缩
- Android手机怎样导出数据库文件
- 关于初学者上传文件到github的方法
- 《人工智能学家》启动2016世界人工智能智商测试,原理和方法
- [leetcode] 15. 3Sum
- JS中alert中文乱码
- 【总结】C++ 出现内存问题
- 遮盖层
- 重复记录的处理