掌握PHP读写 Cookie的执行时间与效率问题,了解PHP读写Cookie对性能的影响,并在实际开发中合理的使用PHP读写Cookie,分析工具采用PEAR Benchmark_Iterate类,主要关注指标为PHP读写Cookie的程序执行时间。
目录
一,什么是PEAR与Benchmark类
二,为什么要分析PHP读写Cookie情况
三,性能测试代码
四,性能测试结果
五,性能测试总结
六,setcookie函数说明
七,附性能测试源代码下载
参考资料
一,什么是PEAR与Benchmark类
请参考PHP性能优化系列
第二期 PHP性能优化工具篇Benchmark类调试执行时间
第一期 PHP性能优化准备篇图解PEAR安装
二,为什么要分析PHP读写Cookie情况
1,什么是Cookie?
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。
2,PHP与Cookie
PHP通过内置函数setcookie()写cookie,通过$_COOKIE全局变量读cookie,在实际开发中,读写Cookie是与用户交互最主要的方式之一,并且使用也非常频繁,因些需要了解PHP在读写操作Cookie的性能与效率问题。
三,性能测试代码
编写三个函数,分别为写cookie、读cookie和读写cookie,代码如下:
代码如下 | 复制代码 |
require_once "Benchmark/Iterate.php"; $bench = new Benchmark_Iterate; function set(){ setcookie("TestCookie", time(), time()+3600, "/", "", 1); } function get(){ return isset($_COOKIE['TestCookie']) ? $_COOKIE['TestCookie'] : ''; } function cookie(){ get(); set(); } $bench->run(50,"set"); //$bench->run(50,"get"); //$bench->run(50,"cookie"); $result = $bench->get(); ?> |
使用Benchmark_Iterate类工具分别调用各个函数50次获取PHP读写Cookie的平均执行时间并生成图表。
四,性能测试结果
1,PHP写Cookie的执行时间
图解:使用PHP内置函数setcookie()向客户端发送一个 HTTP cookie,写Cookie的执行时间 0.00072s左右 注s表示秒
2,PHP读Cookie的执行时间
图解:使用全局变量$_COOKIE获取客户端cookie值,读Cookie的执行时间 0.00051s左右
3,PHP读写Cookie的执行时间
先读取cookie值,然后再向客户端发送一个 HTTP cookie,读写Cookie的执行时间 0.00088s左右
五,性能测试总结
通过折线图可以清楚看到,setcookie() 函数向客户端发送一个 HTTP cookie需要的执行时间大约是0.00072s左右,也就是0.7毫秒,PHP读取Cookie的执行时间为0.00051s左右,也就是0.5毫秒,如果同时读写操作Cookie需要的执行时间为0.00088s,也就是0.8毫秒左右,这些操作在秒的时代基本上执行的时间非常短,但请不要小看这个值,正常的PHP内置函数执行的时间大约在0.3毫秒左右,相对而言读写Cookie的执行时间是比较耗时的,因此,在实际开发中要尽量少用这样的函数,充分考虑读写Cookie的情况,特别是写cookie的情况!
毫秒世界还在继续,请关注下一期PHP性能优化系列。
六,setcookie函数说明
setcookie() 函数向客户端发送一个 HTTP cookie。
代码如下 | 复制代码 |
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) |
1,cookie 是由服务器发送到浏览器的变量。
2,cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。
3,cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。
4,必须在任何其他输出发送前对 cookie 进行赋值。
5,如果成功,则该函数返回 true,否则返回 false。