-
webpack压缩文件配置(html,css,js)
2019-07-03 00:32:58JS 文件的压缩,webpack内置了 uglifyjs-webpack-plugin,打包都是默认压缩了的 当然也可以手动安装 npm i -D uglifyjs-webpack-plugin CSS 文件的压缩,使用 optimize-css-assets-webpack-plugin,同时使用 ...JS 文件的压缩,webpack内置了 uglifyjs-webpack-plugin,打包都是默认压缩了的
当然也可以手动安装
npm i -D uglifyjs-webpack-plugin
CSS 文件的压缩,使用 optimize-css-assets-webpack-plugin,同时使用 cssnano 预处理器(cssnano需要另外安装)
需要先安装这两个插件
npm i -D optimize-css-assets-webpack-plugin npm i -D cssnano
配置
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') module.exports = { entry: { app: './src/app.js', search: './src/search.js' }, output: { filename: '[name][chunkhash:8].js', path: __dirname + '/dist' }, plugins: [ + new OptimizeCSSAssetsPlugin({ + assetNameRegExp: /\.css$/g, + cssProcessor: require('cssnano’) + }) ] };
html 文件的压缩,修改 html-webpack-plugin,设置压缩参数
安装插件
npm i -D html-webpack-plugin
配置
const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: { app: './src/app.js', search: './src/search.js' }, output: { filename: '[name][chunkhash:8].js', path: __dirname + '/dist' }, plugins: [ + new HtmlWebpackPlugin({ + template: path.join(__dirname, 'src/search.html’), + filename: 'search.html’, + chunks: ['search’], + inject: true, + minify: { + html5: true, + collapseWhitespace: true, + preserveLineBreaks: false, + minifyCSS: true, + minifyJS: true, + removeComments: false + } + }) ] };
运行 npm run build 即可
-
Apktool回编译APK变大原因--关于apktool.yml的可压缩文件配置
2018-06-15 11:00:00然而,这改动导致apktool回编译apk包变大,文件经调研和分析发现:在apktool 2.0.3之后为了快速解压和打包,加入了反编译文件回编译不压缩机制。该配置文件位于apktool.yml文件中。 1-1 反编译产物...1.背景
为了实现apk字节码加密技术,我在CI上通过插入了脚本重新打包任务。然而,这改动导致apktool回编译apk包变大,文件经调研和分析发现:在apktool 2.0.3之后为了快速解压和打包,加入了反编译文件回编译
不压缩
机制。该配置文件位于apktool.yml文件中。1-1 反编译产物1-2 apktool.yml详情几乎所有的二进制和非二进制文件打包时都未采用压缩,导致生成的apk变大(即使未签名依然比原apk大),最后在回编过程进行分析。
在反编译文件中查看yml文件,该文件记录了apk反编译信息(见
apktool
源码brut/androlib/meta/MetaInfo
)compressionType
:记录arsc的是否压缩doNotCompress
:记录不压缩的文件类型和路径2.解法
由于最新版本的apktool回编采用了不压缩的策略,导致我们的重编译apk变大。
可以想到的有两种方法:
1.通过apktool高版本来释放1.apk(framworks apk见上次分享),低版本处理反编译和打包的问题。
2.通过脚本将apktool.yml文件进行修改和定制,可以使得我们的release包更小。3.YAML格式
我们需要对yaml格式的文件进行解析,有一个支持yaml格式的著名开源库
snakeyaml
(用java实现)。
我采用jar的形式对这一部分代码(解析YAML和写入文件)进行实现。通过shell脚本插入该任务,从而达到了自动化过程。snakeyaml
的使用参考:
snakeyaml项目地址:https://bitbucket.org/asomov/snakeyaml
snakeyaml java使用:https://www.jianshu.com/p/d8136c913e524.CI上打包结果
通过对反编译脚本的优化使得回编译签名包和zipalign包显著减小。
原始apk 反编译签名apk 反编译zipalign-apk 23.90M 22.48M 22.48M 4-1 CI上打包产物5.脚本实现
#定义out文件的路径 rebApkFile=$cache_dir/rebuildApp.apk echo "rebuildTools> 修改yml打包的配置文件" #定义jar的路径,用来提取和修改apktool.yml文件 yamlFileCovert_jar=./yamlFileCovert.jar #执行yamlFileCovert_jar java -jar $yamlFileCovert_jar ${apkDecodeDir}/apktool.yml ${apkDecodeDir}/apktool.yml echo "rebuildTools> 开始回编译apk并替换目标文件..." apktool b -o ${rebApkFile} ${apkDecodeDir} echo "rebuildTools> 开始签名新apk..." ...
java部分:
public class YamlFileParse { public static void main(String[] args) { String fileName; String outFile; if (args != null && args.length >= 2) { fileName = args[0]; outFile = args[1]; } else { System.out.print("请输入yml路径!\n" + "java -jar yamlFileCovert.jar [in] [out] "); return; } try { MetaInfo metaInfo = loadYml(fileName); saveYml(outFile, metaInfo); } catch (IOException e) { e.printStackTrace(); } } private static void saveYml(String outFile, MetaInfo ret) throws IOException { FileOutputStream fos = new FileOutputStream(new File(outFile)); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos, StandardCharsets.UTF_8); Writer writer = new BufferedWriter(outputStreamWriter); save(ret, writer); outputStreamWriter.close(); } private static MetaInfo loadYml(String fileName) throws IOException { FileInputStream yamlInput = new FileInputStream(new File(fileName)); MetaInfo ret = new Yaml().loadAs(yamlInput, MetaInfo.class); yamlInput.close(); ret.doNotCompress = null; return ret; } private static void save(MetaInfo info, Writer output) { DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); new Yaml().dump(info, output); } }
java的源码部分包括:
yaml
格式文件的读写和MetaInfo
(用于apktool.yml序列化指定,原因见apktool.yml首行)类。5-1 java工程的结构以下是apktool.yml文件,由于文件中包含了MetaInfo类,所以必须指定yml序列化需要的类(这一部分拷贝了apktool源码中部分MetaInfo部分)。
!!brut.androlib.meta.MetaInfo apkFileName: Rong360-release.apk compressionType: false doNotCompress: null isFrameworkApk: false packageInfo: {forcedPackageId: '127', renameManifestPackage: null} sdkInfo: {minSdkVersion: '14', targetSdkVersion: '21'} sharedLibrary: false sparseResources: false usesFramework: ids: [1] tag: null version: 2.3.3 versionInfo: {versionCode: '316', versionName: 3.1.6}
运行
java -jar $yamlFileCovert_jar ${apkDecodeDir}/apktool.yml
对yml进行修改后,回编apk,从而产物的apk大小达到了预期。 -
Hadoop中的文件压缩和压缩算法配置详解
2020-08-10 17:19:43可以看到数据通过大量的拷贝,从map阶段输出的数据,都要通过网络拷贝,发送到reduce阶段,这一过程中,涉及到大量的网络IO,如果数据能够进行压缩,那么数据的发送量就会少得多,那么如何配置hadoop的文件压缩呢,...在MapReduce的Shuffle阶段,可以看到数据通过大量的拷贝,从map阶段输出的数据,都要通过网络拷贝,发送到reduce阶段,这一过程中,涉及到大量的网络IO,如果数据能够进行压缩,那么数据的发送量就会少得多,那么如何配置hadoop的文件压缩呢,以及hadoop当中的文件压缩支持哪些压缩算法呢?
1、hadoop当中支持的压缩算法
文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输
前面我们的hadoop的版本经过我们重新编译之后,我们可以看到我们的hadoop已经支持所有的压缩格式了,剩下的问题就是我们该如何选择使用这些压缩格式来对我们的MapReduce程序进行压缩。
我们可以使用 bin/hadoop checknative 来查看我们编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包:
bin/hadoop checknative yum install openssl-devel
[hadoop@node01 hadoop-2.6.0-cdh5.14.2]$ bin/hadoop checknative 20/08/11 17:11:36 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native 20/08/11 17:11:36 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library Native library checking: hadoop: true /xsluo/install/hadoop-2.6.0-cdh5.14.2/lib/native/libhadoop.so.1.0.0 zlib: true /lib64/libz.so.1 snappy: true /lib64/libsnappy.so.1 lz4: true revision:10301 bzip2: true /lib64/libbz2.so.1 openssl: true /lib64/libcrypto.so
hadoop支持的压缩算法
压缩格式 工具 算法 文件扩展名 是否可切分 DEFLATE 无 DEFLATE .deflate 否 Gzip gzip DEFLATE .gz 否 bzip2 bzip2 bzip2 bz2 是 LZO lzop LZO .lzo 否 LZ4 无 LZ4 .lz4 否 Snappy 无 Snappy .snappy 否 各种压缩算法对应使用的java类
压缩格式 对应使用的java类 DEFLATE org.apache.hadoop.io.compress.DeFaultCodec gzip org.apache.hadoop.io.compress.GZipCodec bzip2 org.apache.hadoop.io.compress.BZip2Codec LZO com.hadoop.compression.lzo.LzopCodec LZ4 org.apache.hadoop.io.compress.Lz4Codec Snappy org.apache.hadoop.io.compress.SnappyCodec 常见的压缩速率比较
压缩算法 原始文件大小 压缩后的文件大小 压缩速度 解压缩速度 gzip 8.3GB 1.8GB 17.5MB/s 58MB/s bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s LZO-bset 8.3GB 2GB 4MB/s 60.6MB/s LZO 8.3GB 2.9GB 135 MB/s 410 MB/s snappy 8.3GB 1.8GB 172MB/s 409MB/s 在生产环境中常用的压缩算法主要有LZO和snappy等
2、如何开启我们的压缩?
方式一:在代码中进行设置压缩
//设置我们的map阶段的压缩 Configuration configuration = new Configuration(); configuration.set("mapreduce.map.output.compress","true"); configuration.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec"); //设置我们的reduce阶段的压缩 configuration.set("mapreduce.output.fileoutputformat.compress","true"); configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD"); configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
方式二:修改mapred-site.xml进行MapReduce压缩
我们可以修改mapred-site.xml配置文件,然后重启集群,以便对所有的mapreduce任务进行压缩
map输出数据进行压缩:
<property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapreduce.map.output.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>
reduce输出数据进行压缩:
<property> <name>mapreduce.output.fileoutputformat.compress</name> <value>true</value> </property> <property> <name>mapreduce.output.fileoutputformat.compress.type</name> <value>RECORD</value> </property> <property> <name>mapreduce.output.fileoutputformat.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property
注意:所有节点都要修改mapred-site.xml,修改完成之后记得重启集群。
3、使用hadoop的snappy压缩来对我们的数据进行压缩
这里我们通过修改代码的方式来实现数据的压缩:
//map阶段输出压缩配置 Configuration configuration = new Configuration(); configuration.set("mapreduce.map.output.compress","true"); configuration.set("mapreduce.map.output.compress.codec","org.apache.hadoop.io.compress.SnappyCodec"); //reduce阶段输出压缩配置 configuration.set("mapreduce.output.fileoutputformat.compress","true"); configuration.set("mapreduce.output.fileoutputformat.compress.type","RECORD"); configuration.set("mapreduce.output.fileoutputformat.compress.codec","org.apache.hadoop.io.compress.SnappyCodec");
重新打包测试mr程序,
会发现我们的MR运行之后的输出文件都变成了以.snappy的压缩文件。
-
php启用zlib压缩文件的配置方法
2014-04-15 11:17:46但是不论是iis 还是apache默认都只压缩html类静态文件,对于php文件需要模块配置才可支持(iis7.5中开启动态+静态压缩也可以),于是利用php自身功能到达gzip的效果也成为一项合理的诉求。 实现的方法很简单...一般而言,页面文件开启gzip压缩以后,其体积可以减小60%~90%,对于文字类站点,可以节省下大量的带宽与用户等待时间
但是不论是iis 还是apache默认都只压缩html类静态文件,对于php文件需要模块配置才可支持(iis7.5中开启动态+静态压缩也可以),于是利用php自身功能到达gzip的效果也成为一项合理的诉求。
实现的方法很简单,打开php目录下的php.ini文件,
复制代码 代码如下:
zlib.output_compression = Off
;zlib.output_compression_level = -1output_buffering = Off
修改成
复制代码 代码如下:
zlib.output_compression =On
zlib.output_compression_level = 5
output_buffering = 4096
需要说明的是以下几点
一、;zlib.output_handler必须保持注释掉,因为此参数和前面的设置冲突——官方的说法。
二、一般情况下缓存是4k(output_buffering = 4096)。
三、zlib.output_compression_level 建议参数值是1~5,6以上实际压缩效果提升不大,cpu占用却是几何增长。
最后通过firebug查看请求头和回应头,实际上gzip效果已经显示,或者通过站长gzip检测工具也显示gzip有效。 -
springmvc 文件上传及压缩的配置详解
2017-06-16 10:42:30使用commons-io.jar, commons-fileupload.jar 及 ImageUtils.java进行文件压缩上传,配置如下。 1.form的提交的类型 及提交的方式: enctype="multipart/form-data" method="post" 。 2.文件解析器,id必须... -
配置nginx直接使用webpack生成的gz压缩文件
2020-01-16 22:23:40配置nginx直接使用webpack生成的gz压缩文件 前言:vue cli3的性能优化里面,开启gzip能得到很多的收益。通过webpack插件compression-webpack-plugin可以在打包的时候生成.gz文件;当用nginx做服务器时,nginx通过... -
lzo压缩之配置文件与程序对应关系
2014-03-23 16:05:59lzo压缩之配置文件与程序对应关系 1.core-site.xml中的: io.compression.codecs org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,... -
配置nginx直接使用webpack生成的gz压缩文件,而不用nginx自己压缩
2019-08-22 11:44:05前言:vue cli3的性能优化里面,开启gzip能得到很多的收益。通过webpack插件compression-webpack-plugin可以在...而且webpack打包时已经生成了压缩文件,完全没必要重新通过nginx再压缩一下。发现这个问题后,通过... -
tomcat gzip 压缩配置,实现文件自动压缩的功能
2015-04-13 14:56:35项目使用的是extjs作为前端框架,这样就需要加载大量...因为之前是自己手动压缩js文件,然后在web.xml里面配置一个filter,这样好是好,但是后台返回的json数据却不能压缩,而且不能达到一劳永逸的效果,每个需要压缩... -
hadoop之文件压缩格式对比分析以及配置实现
2019-04-16 17:28:532.2压缩在ETL作业生命周期在使用场景3.MR文件压缩配置实现3.1 确保hadoop支持压缩3.2修改hadoop配置文件4.hive文件压缩配置实现4.1 原测试数据大小4.2文件不压缩4.2文件采用bzip2压缩4.3文件采用压缩gzip压缩 ... -
couchdb 修改配置文件压缩数据
2020-05-28 20:04:14背景 couchdb数据库部署在云服务上, 当时由于开放权限端口权限人员不在,无法开放端口,事情紧急,于是绕了一下。 正常开放端口权限操作 1. 使用连接地址访问修改配置 ... 2. 修改界面如下 ...2. 进入配置文件路径 -
nginx配置文件的gzip压缩
2019-10-30 13:32:40先把效果图上来吧 ...对比之后可以明显的发现配置了gzip后浏览器请求的文件大小小了很多。请求速度也得到了很大的优化(我这里使用内网穿透工具带宽只有128K)nginx配置gzip gzip on; #开启gzip gzip_v... -
Hadoop-优化-数据压缩,压缩方式,压缩参数配置
2020-07-29 23:26:46文章目录Hadoop数据压缩1 概述2 MR支持的压缩编码3 压缩方式选择3.1 Gzip压缩3.2 Bzip2压缩3.3 Lzo压缩3.4 Snappy压缩4 压缩位置选择5 压缩参数配置 1 概述 2 MR支持的压缩编码 压缩格式 hadoop自带? 算法 ... -
四、webpack配置生产环境下压缩html文件
2020-02-28 15:25:47当配置成生产环境后,打包的js文件会被压缩,但是html文件默认不会被压缩 需要手动配置 // webpack 是node写出来的 node的写法 let path = require('path'); // console.log(path.resolve('dist')) let ... -
详解Nginx服务器的配置中开启文件Gzip压缩的方法
2020-09-30 14:19:18主要介绍了Nginx服务器的配置中开启文件Gzip压缩的方法,可以对CSS和JavaScript以及各种图片等web传输的文件进行压缩,需要的朋友可以参考下 -
Linux logrotate配置 -- 自动压缩日志文件
2019-03-18 22:22:58日志文件包含了关于系统中发生的事件的有用信息,在...logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。配置完后,logrotate的运作完全自动化,不必进行任何进一步的... -
Hive压缩格式配置
2019-08-12 05:53:421、文件压缩配置实现 首先你的Hadoop是需要编译安装的,参考博客:Hadoop源码编译 https://blog.csdn.net/greenplum_xiaofan/article/details/95466703 检查Hadoop支持的压缩格式: [hadoop@vm01 hadoop-2.6.0-... -
文件压缩
2016-08-01 10:13:45简述:利用哈夫曼编码进行文件的压缩和解压缩。 开发环境:windows,VS2013,C++ 项目特点: 压缩文件:读取文件... 解压缩文件:从配置文件中读取字符及对应字符的出现次数建立哈夫曼树,得到解压缩文件中的字符。 -
linux-day3:vim和用户配置文件;用户管理;组管理;文件权限;解压缩
2020-04-06 16:13:00linux-day3配置文件用户管理组管理用户帐号配置文件文件(夹)权限压缩解压缩tar 配置文件 将配置写入配置文件,终端连接时会读取。 系统配置文件 所有用户的配置文件 /etc/bashrc(在CentOS环境中,在ubuntu对应文件:/... -
修改Apache配置文件开启gzip压缩传输
2018-08-14 14:52:21第1步 LoadModule deflate_module modules/mod_... 打开httpd.conf后,先将上面两行配置前面的#号去掉,这样apache就会启用这两个模块,其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;mod... -
IIS7 动态文件压缩模块安装及配置
2013-10-14 15:26:54压缩协商 服务器怎么知道浏览器能够接收压缩内容?浏览器怎么知道接收的内容是压缩过的?...如果服务器响应使用了压缩,会在未压缩的文件头中包含一个响应头Content-Encoding,说明文件是怎么压缩 -
jdk1.8压缩文件rar zip java8压缩版
2018-04-24 10:38:05jdk1.8压缩文件rar zip java8压缩版 解压缩配置即可用,如果有搜到我前面发的那个资源请不要下载,下这个,那个有些东西没有配置好