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 相关文章推荐
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
php入门学习知识点二 PHP简单的分页过程与原理
Jul 14 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php.ini中的request_order推荐设置
May 10 PHP
php示例详解Constructor Prototype Pattern 原型模式
Oct 15 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 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目录导航文件代码
2006/10/09 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
jquery时间下拉框小例子
2013/04/15 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
2017/07/04 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
python检测远程udp端口是否打开的方法
2015/03/14 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
Java基础面试题
2014/07/19 面试题
资料员的岗位职责
2013/11/20 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
yy司仪主持词
2014/03/22 职场文书
医药营销个人求职信
2014/04/12 职场文书
作文批改评语大全
2014/04/23 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
推荐信模板
2014/05/09 职场文书
承诺书范本
2015/01/21 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server