首页->正文

session读取导致页面加载慢

2012-01-14 -Web开发 标签: php

之前开发后台时遇到过此种问题:某一个页面比较耗时,新窗口中打开另外一个页面也变的很慢。因为是公司内部使用的项目,一直没在意。最近一同事也遇到此问题,找下具体原因。

一开始想到的是web服务器原因,在本地写了两个简单的测试页面:一个显示快的页面直接输出文字,另外一个页面通过sleep控制页面输出时间,用来模拟慢的页面。

首先打开较慢的页面,再打开快的页面,发现快的立刻输出内容,而慢的仍然在等待。本地环境测试结果和线上环境的测试结果一样,所以确定不是web服务的问题。

由于是后台应用,是根据session判断是否登录,所以在两个测试页面首行加上了session_start(),这时再运行则重现了线上的问题:本来快的页面也要等待慢的页面运行结束后才会显示。

因此确定是session的问题,那会不会是session同时写造成的呢?网上搜索下相关资料,果然是php为了防止session同时写,对session文件进行了锁,也就造成了这种问题。

如何解决此问题呢?
1 不用seesion,改用cookie,但有可能对登录部分修改较大;
2 改用memcache存储session,无需考虑锁问题,代码无需修改,但要搭建单独的memcached服务;
3 如果仍然采用文件方式保持session,可通过php的session_write_close()函数临时解决下。例如,某个较慢的页面只是读取session,可以在读取session信息完毕后立刻调用此函数,从而立刻释放session文件锁。


扩展资料
关于session锁
http://www.php.net/manual/en/ref.session.php#64525

php用memcache方式保存session
http://www.phpv.net/html/1542.html

session的几种存储方案
http://kevin.vanzonneveld.net/techblog/article/enhance_php_session_management/

下一篇 Bloom Filter算法在php中的实现

上一篇 常用的一些开发相关软件汇总

相关文章

Ubuntu下编译安装PHP

使用curl_multi_init并发请求

php增加Last-Modified为何无效

用xhprof分析php代码

正则修饰符m和s用法

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com