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调用三种数据库的方法(3)
Oct 09 PHP
第一节--面向对象编程
Nov 16 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
html下载本地
2006/06/19 Javascript
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
Js sort排序使用方法
2011/10/17 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
redis之django-redis的简单缓存使用
2018/06/07 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
python处理document文档保留原样式
2019/09/23 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
Android笔试题总结
2014/11/29 面试题
医学院校毕业生自荐信范文
2014/01/01 职场文书
新手上路标语
2014/06/20 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
祝寿主持词
2015/07/02 职场文书
2016年教代会开幕词
2016/03/04 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL