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 相关文章推荐
php把数组值转换成键的方法
Jul 13 PHP
详细解读PHP的Yii框架中登陆功能的实现
Aug 21 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP实现的浏览器检查类
Apr 11 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
php中用unset销毁变量并释放内存
May 10 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下清空字符串中的HTML标签的代码
2010/09/06 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
python动态监控日志内容的示例
2014/02/16 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python dataframe NaN处理方式
2019/12/26 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python中的unittest框架实例详解
2021/02/05 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
党员干部公开承诺书
2014/03/26 职场文书
求职信结尾怎么写
2014/05/26 职场文书
树转促学习心得体会
2014/09/10 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python