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 相关文章推荐
PHP5.0对象模型探索之抽象方法和抽象类
Sep 05 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
php获取错误信息的方法
Jul 17 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
php生成图片缩略图功能示例
Feb 22 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
PHP异步进程助手async-helper
Feb 05 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 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解决约瑟夫环算法实例分析
2019/09/30 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
Python切片索引用法示例
2018/05/15 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
python系列 文件操作的代码
2019/10/06 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python datetime处理时间小结
2020/04/16 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
税务专业毕业生自荐信
2013/11/10 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
元旦活动感言
2014/03/08 职场文书
加薪通知
2015/04/25 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
JavaScript的function函数详细介绍
2021/11/20 Javascript
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python