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 相关文章推荐
轻松修复Discuz!数据库
May 03 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
PHP函数之日期时间函数date()使用详解
Sep 09 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
Nov 05 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
详解php中流行的rpc框架
May 29 PHP
Linux系统下安装PHP7.3版本
Jun 26 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 字符串替换的方法
2012/01/10 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
详解javascript遍历方式
2015/11/11 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
简单说明Python中的装饰器的用法
2015/04/24 Python
Python写的一个简单监控系统
2015/06/19 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
python super的使用方法及实例详解
2019/09/25 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
乐观大学生的自我评价
2014/01/10 职场文书
学习自我鉴定
2014/02/01 职场文书
个人安全生产承诺书
2014/05/22 职场文书
就业协议书范本
2014/10/08 职场文书
商铺门面租房协议书
2014/10/21 职场文书
学生检讨书范文
2019/06/24 职场文书