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 相关文章推荐
ADODB类使用
Nov 25 PHP
php下拉选项的批量操作的实现代码
Oct 14 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 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中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python视频按帧截取图片工具
2019/07/23 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
大学生个人求职信
2014/06/02 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
消防安全主题班会
2015/08/12 职场文书