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 相关文章推荐
第三节 定义一个类 [3]
Oct 09 PHP
php生成图形(Libchart)实例
Nov 06 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php实现的支持断点续传的文件下载类
Sep 23 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
Feb 14 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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错误日志的获取方法
2015/07/20 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
采用call方式实现js继承
2014/05/20 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
Django中使用Celery的教程详解
2018/08/24 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
Python常用断言函数实例汇总
2020/11/30 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
软件工程师面试题
2012/06/25 面试题
秋季运动会通讯稿
2014/01/24 职场文书
运动会通讯稿150字
2014/02/15 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
工程专业应届生求职信
2014/02/19 职场文书
公立医院改革实施方案
2014/03/14 职场文书
财务工作检讨书
2014/10/29 职场文书
承诺保证书格式
2015/02/28 职场文书
车间统计员岗位职责
2015/04/14 职场文书