php session阻塞页面分析及优化 (session_write_close session_commit使用)
转: http://www.tuicool.com/articles/bqeeey
首先看下下面代码, session1.php 文件
- <?php
- ini_set('session.save_path', './tmp/');
- function open($save_path, $session_name) {
- echo __FUNCTION__,"<br/>";
- return (true);
- }
- function close(){
- echo __FUNCTION__,"<br/>";
- return (true);
- }
- function read($id){
- echo __FUNCTION__,"<br/>";
- }
- function write($id, $sess_data){
- echo __FUNCTION__,"<br/>";
- return (true);
- }
- function destroy($id){
- echo __FUNCTION__,"<br />";
- return(true);
- }
- function gc($maxlifetime){
- echo __FUNCTION__,"<br />";
- return true;
- }
- session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
- register_shutdown_function('test');
- function test()
- {
- echo __FUNCTION__,"<br />";
- }
- session_start();
- echo 'aaaaa',"<br />";
- /*
- 结论->session_start开启后, 会自动执行open,read函数。
- 等页面执行完后,会执行shutdown函数.最后后会把session写入进去,然后执行close关闭文件
- 从session_start 到页面结束,会一直锁定文件或者保持连接的。
- */
然后通过1个实例子来理解 , 先执行 session2.php 代码, 20秒内执行 session3.php
session2.php 文件
- <?php
- //执行 session2.php和session3.php,
- /*
- 因为 session2.php 脚本一直没有结束,结束后 session才会执行写入和关闭操作 (看session1.php 结论), session一直被锁定了
- 因此执行session3.php 时会发现 一直处于阻塞状态。
- */
- /*
- session_start();
- $_SESSION['uname'] = 'lily';
- sleep(20);
- */
- //如果用以下代码 就没问题了, 立即提交 写入关闭
- session_start();
- $_SESSION['uname'] = 'lemon';
- session_commit();
- sleep(20);
session3.php 文件
- <?php
- session_start();
- echo $_SESSION['uname'];
总结:
- //可以用 session_commit (别名 session_write_close) 立即执行写入关闭
- /*
- session_start();
- $_SESSION['aaaa'] = 1000;
- session_commit(); //执行commit后,直接会调用,wirte,close操作
- */
- /*
- 1.只读取session页面,建议打开后,就直接commit,这是$_SESSION变量已经生成了。
- 2.有对session进行写入页面,建议修改完$_SESSION后,直接调用commit
- 3.多次打开并且写入,这个不建议使用,比较打开文件,写入都是耗费时间的。如果能一次搞定的,就不要做多次了。 除非,中间执行很耗时的业务。
- 后记:其实,使用完session,随手commit也不是坏事,养成习惯后。可以节省性能,减少服务器开销。是个不错选择!欢迎大家交流!
- *
- /
php session阻塞页面分析及优化 (session_write_close session_commit使用)的更多相关文章
- Asp.net项目因Session阻塞导致页面打开速度变慢
发现罪魁祸首是Session阻塞造成的.默认情况下session状态是“可写状态”(EnableSessionState=”true”),即当用户打开任何一个页面时,该页面的Session就会持有一个 ...
- 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session
什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...
- 1.linux服务器的性能分析与优化
[教程主题]:1.linux服务器的性能分析与优化 [课程录制]: 创E [主要内容] [1]影响Linux服务器性能的因素 操作系统级 CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处 ...
- 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化
高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...
- 一:MySQL数据库的性能的影响分析及其优化
MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...
- WebView性能、体验分析与优化
育新 徐宏 嘉洁 ·2017-06-09 20:03 在App开发中,内嵌WebView始终占有着一席之地.它能以较低的成本实现Android.iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的 ...
- linux服务器的性能分析与优化(十三)
[教程主题]:1.linux服务器的性能分析与优化 [主要内容] [1]影响Linux服务器性能的因素 操作系统级 Ø CPU 目前大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间 ...
- 谷歌chrome浏览器network中Stalled分析和优化
谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...
- mysql性能优化-慢查询分析、优化索引和配置
一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1) max_connec ...
随机推荐
- BatchNormalization批量归一化
动机: 防止隐层分布多次改变,BN让每个隐层节点的激活输入分布缩小到-1和1之间. 好处: 缩小输入空间,从而降低调参难度:防止梯度爆炸/消失,从而加速网络收敛. BN计算公式: keras.laye ...
- 【Python编程:从入门到实践】chapter5 if语句
chapter5 if语句5.1 一个简单示例cars = ['audio','bmw','subaru','toyota'] for car in cars:if car == 'bmw':prin ...
- css图片变色变暗变亮
本文章向码农介绍css 图片变色变暗变亮 实例代码如下: <style> *{margin:0;padding:0;list-style:none;} img{border:1px sol ...
- 微软&中科大提出新型自动神经架构设计方法NAO
近期,来自微软和中国科学技术大学的刘铁岩等人发表论文,介绍了一种新型自动神经架构设计方法 NAO,该方法由三个部分组成:编码器.预测器和解码器.实验证明,该方法所发现的架构在 CIFAR-10 上的图 ...
- Linux火焰图-centos
centos7.5mini安装 yum install -y yum-utils perf debuginfo-install -y perf #debuginfo-install下载了305MB的文 ...
- Linux火焰图-ubuntu
关注火焰图非常长的时间了!~~一直未能自己做个火焰图出来.今天小试一把. ubuntu18.04 ssh登陆之后执行命令 安装软件 apt-get install -y linux-cloud-too ...
- 开发组件:tmpfs
[Linux]tmpfs简介及增加方式 https://blog.csdn.net/nextaction/article/details/57076924
- jshint在bat批处理中闪退,代码中无法调用的问题
先说解决办法:加个call eg: call jshint --version Pause 具体原因有空再更
- C编程常错项
linux系统下C编程一般报错;1,使用sqrt开平方函数未定义,是因为math.h[库,头文件未包含]2,隐式申明与内建函数"XXXX"不兼容;上述问题所在,一般是因为使用exi ...
- 表单:提交验证,及blur事件验证
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...