精华内容
下载资源
问答
  • webpack压缩文件配置(html,css,js)

    千次阅读 2019-07-03 00:32:58
    JS 文件压缩,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 2.0.3之后为了快速解压和打包,加入了反编译文件回编译不压缩机制。该配置文件位于apktool.yml文件中。 1-1 反编译产物...

    1.背景

    为了实现apk字节码加密技术,我在CI上通过插入了脚本重新打包任务。然而,这改动导致apktool回编译apk包变大,文件经调研和分析发现:在apktool 2.0.3之后为了快速解压和打包,加入了反编译文件回编译不压缩机制。该配置文件位于apktool.yml文件中。

    img_3465350eb0f6545ffcbe05c6f5ccfba6.png
    1-1 反编译产物
    img_1ff33365d629acc19f14d52834b2de2b.png
    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/d8136c913e52

    4.CI上打包结果

    通过对反编译脚本的优化使得回编译签名包和zipalign包显著减小。

    原始apk 反编译签名apk 反编译zipalign-apk
    23.90M 22.48M 22.48M
    img_3d314cf54f69b54e6fd12e3fb9c10451.png
    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首行)类。

    img_0041def3f4486ee764e72f9163fc4c79.png
    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大小达到了预期。

    展开全文
  • 可以看到数据通过大量的拷贝,从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的压缩文件。

    展开全文
  • 但是不论是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有效。
    展开全文
  • 使用commons-io.jar, commons-fileupload.jar 及 ImageUtils.java进行文件压缩上传,配置如下。  1.form的提交的类型 及提交的方式: enctype="multipart/form-data" method="post" 。    2.文件解析器,id必须...
  • 配置nginx直接使用webpack生成的gz压缩文件 前言:vue cli3的性能优化里面,开启gzip能得到很多的收益。通过webpack插件compression-webpack-plugin可以在打包的时候生成.gz文件;当用nginx做服务器时,nginx通过...
  • lzo压缩配置文件与程序对应关系

    千次阅读 2014-03-23 16:05:59
    lzo压缩配置文件与程序对应关系 1.core-site.xml中的:  io.compression.codecs  org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,...
  • 前言:vue cli3的性能优化里面,开启gzip能得到很多的收益。通过webpack插件compression-webpack-plugin可以在...而且webpack打包时已经生成了压缩文件,完全没必要重新通过nginx再压缩一下。发现这个问题后,通过...
  • 项目使用的是extjs作为前端框架,这样就需要加载大量...因为之前是自己手动压缩js文件,然后在web.xml里面配置一个filter,这样好是好,但是后台返回的json数据却不能压缩,而且不能达到一劳永逸的效果,每个需要压缩...
  • 2.2压缩在ETL作业生命周期在使用场景3.MR文件压缩配置实现3.1 确保hadoop支持压缩3.2修改hadoop配置文件4.hive文件压缩配置实现4.1 原测试数据大小4.2文件压缩4.2文件采用bzip2压缩4.3文件采用压缩gzip压缩 ...
  • 背景 couchdb数据库部署在云服务上, 当时由于开放权限端口权限人员不在,无法开放端口,事情紧急,于是绕了一下。 正常开放端口权限操作 1. 使用连接地址访问修改配置 ... 2. 修改界面如下 ...2. 进入配置文件路径
  • 先把效果图上来吧 ...对比之后可以明显的发现配置了gzip后浏览器请求的文件大小小了很多。请求速度也得到了很大的优化(我这里使用内网穿透工具带宽只有128K)nginx配置gzip gzip on; #开启gzip gzip_v...
  • 文章目录Hadoop数据压缩1 概述2 MR支持的压缩编码3 压缩方式选择3.1 Gzip压缩3.2 Bzip2压缩3.3 Lzo压缩3.4 Snappy压缩4 压缩位置选择5 压缩参数配置 1 概述 2 MR支持的压缩编码 压缩格式 hadoop自带? 算法 ...
  • 配置成生产环境后,打包的js文件会被压缩,但是html文件默认不会被压缩 需要手动配置 // webpack 是node写出来的 node的写法 let path = require('path'); // console.log(path.resolve('dist')) let ...
  • 主要介绍了Nginx服务器的配置中开启文件Gzip压缩的方法,可以对CSS和JavaScript以及各种图片等web传输的文件进行压缩,需要的朋友可以参考下
  • 日志文件包含了关于系统中发生的事件的有用信息,在...logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件配置完后,logrotate的运作完全自动化,不必进行任何进一步的...
  • Hive压缩格式配置

    2019-08-12 05:53:42
    1、文件压缩配置实现 首先你的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配置文件用户管理组管理用户帐号配置文件文件(夹)权限压缩压缩tar 配置文件配置写入配置文件,终端连接时会读取。 系统配置文件 所有用户的配置文件 /etc/bashrc(在CentOS环境中,在ubuntu对应文件:/...
  • 第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压缩版 解压缩配置即可用,如果有搜到我前面发的那个资源请不要下载,下这个,那个有些东西没有配置

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,022
精华内容 6,808
关键字:

压缩文件配置