php 字符串压缩方法比较示例


Posted in PHP onJanuary 23, 2014

php 提供的字符串压缩方法有

1.gzcompress — Compress a string

This function compress the given string using the ZLIB data format.

2.gzencode — Create a gzip compressed string

This function returns a compressed version of the input data compatible with the output of the gzip program

3.gzdeflate — Deflate a string

This function compress the given string using the DEFLATE data format.

4.bzcompress — 把一个字符串压缩成 bzip2 编码数据

bzcompress() 压缩了指定的字符串并以 bzip2 编码返回数据。

下面对这四种方法进行压缩比较,分别进行中文和英文数字的压缩

<?php $str1 = '布局 1 介绍 布局,简单来说就是设置元素的大小和位置。 Ext 的布局系统包括组件,布局,容器,容器是一种特殊的组件,可以管理组件的大小和位置。 容器是通过 doLayout 来重新计算布局,并更新 DOM. 2 手工布局是不必要的,框架会为你自动处理。'; 
$str2 = '!@#$%^&*()QWERTYUIOPSDFGHJKL!@#$%^&*()QWERTYUIOPSDFGHJKL:ZXCVBNMa!@#$%^&*()ERTYUIODFGHJKLXCVBNM@#$%^&*()RTYUIOPD:ZXCVBNM#!@#!@#$%^&*()QWERTYUIOPSDFGHJKL:ZXCVBNM-!@#$%^&*()ERTYUIODFGHJKLXCVBNM@#$%^&*()RTYUIOPD$%^&*()ERTYUIODFGHJ!@#$%^&*()QWERTYUIOPSDFGHJKL:ZXCVBNM]!@#$%^&*()ERTYUIODFGHJKLXCVBNM@#$%^&*()RTYUIOPDKLXCVBNM@#$%^&*()RTYUIOPDFGHJKLCVBNMFGHJTYU%^&RFGHJ4d56g7h8ui7h8ujirqwerqh8'; 
echo '<b>压缩中文比较</b><br><br>'; 
compress_comp($str1, 1000); // 压缩1000次 与 解压缩1000次比较 
echo '<b>压缩英文数字比较</b><br><br>'; 
compress_comp($str2, 1000); // 压缩1000次 与 解压缩1000次比较 
/* 压缩 */ 
function compress_comp($str, $num){ 
$func_compress = array('gzcompress', 'gzencode', 'gzdeflate', 'bzcompress'); 
echo '原文:'.$str.'<br><br>'; 
echo '原文大小:'.strlen($str).'<br><br>'; 
for($i=0,$length=count($func_compress); $i<$length; $i++){ 
$starttime = get_microtime(); 
for($j=0; $j<$num; $j++){ 
switch($func_compress[$i]){ 
case 'gzcompress': 
$mstr = gzcompress($str, 9); // 解压方法:gzuncompress 
break; 
case 'gzencode': 
$mstr = gzencode($str, 9); // 解压方法:gzdecode php>=5.4 
break; 
case 'gzdeflate': 
$mstr = gzdeflate($str, 9); // 解压方法:gzinflate 
break; 
case 'bzcompress': 
$mstr = bzcompress($str, 9); // 解压方法:bzdecompress 
break; 
} 
} 
$endtime = get_microtime(); 
echo $func_compress[$i].' 压缩后大小:'.strlen($mstr).' 耗时:'.round(($endtime-$starttime)*1000,5).'ms<br><br>'; 
} 
} 

/* 获取 microtime */ 
function get_microtime(){ 
list($usec, $sec) = explode(' ', microtime(true)); 
return $usec+$sec; 
} 
?>

执行结果:
压缩中文比较 原文:布局 1 介绍 布局,简单来说就是设置元素的大小和位置。 Ext 的布局系统包括组件,布局,容器,容器是一种特殊的组件,可以管理组件的大小和位置。 容器是通过 doLayout 来重新计算布局,并更新 DOM. 2 手工布局是不必要的,框架会为你自动处理。 
原文大小:328 
gzcompress 压缩后大小:251 耗时:59.99994ms 
gzencode 压缩后大小:263 耗时:120.00012ms 
gzdeflate 压缩后大小:245 耗时:119.99989ms 
bzcompress 压缩后大小:303 耗时:259.99999ms 
压缩英文数字比较 
原文:!@#$%^&*()QWERTYUIOPSDFGHJKL!@#$%^&*()QWERTYUIOPSDFGHJKL:ZXCVBNMa!@#$%^&*()ERTYUIODFGHJKLXCVBNM@#$%^&*()RTYUIOPD:ZXCVBNM#!@#!@#$%^&*()QWERTYUIOPSDFGHJKL:ZXCVBNM-!@#$%^&*()ERTYUIODFGHJKLXCVBNM@#$%^&*()RTYUIOPD$%^&*()ERTYUIODFGHJ!@#$%^&*()QWERTYUIOPSDFGHJKL:ZXCVBNM]!@#$%^&*()ERTYUIODFGHJKLXCVBNM@#$%^&*()RTYUIOPDKLXCVBNM@#$%^&*()RTYUIOPDFGHJKLCVBNMFGHJTYU%^&RFGHJ4d56g7h8ui7h8ujirqwerqh8 
原文大小:386 
gzcompress 压缩后大小:116 耗时:50.00019ms 
gzencode 压缩后大小:128 耗时:99.9999ms 
gzdeflate 压缩后大小:110 耗时:89.99991ms 
bzcompress 压缩后大小:183 耗时:210.00004ms

可以得出

gzcompress 速度最快,压缩比率较高。

gzdeflate 压缩比率最高,速度稍慢于gzcompress

gzencode 与 gzdeflate 比较接近,gzdeflate稍有优势

bzcompress 速度最慢,压缩比率最慢。

因此建议使用 gzcompress 和 gzdeflate。

PHP 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)续四
Apr 03 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
详解PHP数组赋值方法
Nov 07 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
php 生成短网址原理及代码
Jan 23 #PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 #PHP
php弹出对话框实现重定向代码
Jan 23 #PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 #PHP
简单的php缓存类分享     php缓存机制
Jan 22 #PHP
一组PHP可逆加密解密算法实例代码
Jan 21 #PHP
discuz加密解密函数使用方法和中文注释
Jan 21 #PHP
You might like
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
Linux中为php配置伪静态
2014/12/17 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
Python 正则表达式操作指南
2009/05/04 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python实现大量图片重命名
2020/03/23 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
Html5之title吸顶功能
2018/06/04 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
家长写给孩子的评语
2014/04/18 职场文书
我爱读书演讲稿
2014/05/07 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
自我评价优缺点范文
2015/03/11 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
音乐研修感悟
2015/11/18 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
美元符号 $
2022/02/17 杂记