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制作静态网站的模板框架(二)
Oct 09 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
php判断变量类型常用方法
Apr 24 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
Jan 22 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 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五种设计模式小结
2011/03/23 PHP
php排序算法实例分析
2016/10/17 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
详解Bootstrap插件
2016/04/25 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
Javascript之String对象详解
2016/06/08 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
详解vue2 $watch要注意的问题
2017/09/08 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
vue生命周期的探索
2019/04/03 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
社区中秋节活动方案
2014/01/29 职场文书
美容院考勤制度
2014/01/30 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
扬尘污染防治方案
2014/06/15 职场文书
体育口号大全
2014/06/18 职场文书
2015年电工工作总结
2015/04/10 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
总经理年会致辞
2015/07/29 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
TS 类型兼容教程示例详解
2022/09/23 Javascript